xref: /csrg-svn/lib/libc/stdio/fwrite.c (revision 17443)
1*17443Sralph /* @(#)fwrite.c	4.3 (Berkeley) 11/29/84 */
216550Skarels #include	<stdio.h>
316550Skarels 
416550Skarels fwrite(ptr, size, count, iop)
516550Skarels 	register char *ptr;
616550Skarels 	unsigned size, count;
716550Skarels 	register FILE *iop;
816550Skarels {
916550Skarels 	register int s;
1016550Skarels 
1116550Skarels 	s = size * count;
12*17443Sralph 	if (iop->_flag & _IOLBF)
13*17443Sralph 		while (--s >= 0) {
14*17443Sralph 			if (--iop->_cnt > -iop->_bufsiz && *ptr != '\n')
15*17443Sralph 				*iop->_ptr++ = *ptr++;
16*17443Sralph 			else if (_flsbuf(*(unsigned char *)ptr++, iop) == EOF)
17*17443Sralph 				break;
18*17443Sralph 		}
19*17443Sralph 	else while (s > 0) {
2016550Skarels 		if (iop->_cnt < s) {
2116550Skarels 			if (iop->_cnt > 0) {
2216550Skarels 				bcopy(ptr, iop->_ptr, iop->_cnt);
2316550Skarels 				ptr += iop->_cnt;
2416550Skarels 				iop->_ptr += iop->_cnt;
2516550Skarels 				s -= iop->_cnt;
2616550Skarels 			}
27*17443Sralph 			if (_flsbuf(*(unsigned char *)ptr++, iop) == EOF)
2816550Skarels 				break;
2916550Skarels 			s--;
3016550Skarels 		}
3116550Skarels 		if (iop->_cnt >= s) {
3216550Skarels 			bcopy(ptr, iop->_ptr, s);
3316550Skarels 			iop->_ptr += s;
3416550Skarels 			iop->_cnt -= s;
3516550Skarels 			return (count);
3616550Skarels 		}
3716550Skarels 	}
3816550Skarels 	return (count - ((s + size - 1) / size));
3916550Skarels }
40