xref: /csrg-svn/lib/libc/stdio/fwrite.c (revision 16550)
1*16550Skarels /* @(#)fwrite.c	4.1 (Berkeley) 05/29/84 */
2*16550Skarels #include	<stdio.h>
3*16550Skarels 
4*16550Skarels fwrite(ptr, size, count, iop)
5*16550Skarels 	register char *ptr;
6*16550Skarels 	unsigned size, count;
7*16550Skarels 	register FILE *iop;
8*16550Skarels {
9*16550Skarels 	register int s;
10*16550Skarels 
11*16550Skarels 	s = size * count;
12*16550Skarels 	while (s > 0) {
13*16550Skarels 		if (iop->_cnt < s) {
14*16550Skarels 			if (iop->_cnt > 0) {
15*16550Skarels 				bcopy(ptr, iop->_ptr, iop->_cnt);
16*16550Skarels 				ptr += iop->_cnt;
17*16550Skarels 				iop->_ptr += iop->_cnt;
18*16550Skarels 				s -= iop->_cnt;
19*16550Skarels 			}
20*16550Skarels 			if (_flsbuf((unsigned)*ptr++, iop) == EOF)
21*16550Skarels 				break;
22*16550Skarels 			s--;
23*16550Skarels 		}
24*16550Skarels 		if (iop->_cnt >= s) {
25*16550Skarels 			bcopy(ptr, iop->_ptr, s);
26*16550Skarels 			iop->_ptr += s;
27*16550Skarels 			iop->_cnt -= s;
28*16550Skarels 			return (count);
29*16550Skarels 		}
30*16550Skarels 	}
31*16550Skarels 	return (count - ((s + size - 1) / size));
32*16550Skarels }
33