xref: /csrg-svn/lib/libc/stdio/fwrite.c (revision 17861)
1*17861Sralph /* @(#)fwrite.c	4.4 (Berkeley) 01/23/85 */
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;
1217443Sralph 	if (iop->_flag & _IOLBF)
13*17861Sralph 		while (s > 0) {
1417443Sralph 			if (--iop->_cnt > -iop->_bufsiz && *ptr != '\n')
1517443Sralph 				*iop->_ptr++ = *ptr++;
1617443Sralph 			else if (_flsbuf(*(unsigned char *)ptr++, iop) == EOF)
1717443Sralph 				break;
18*17861Sralph 			s--;
1917443Sralph 		}
2017443Sralph 	else while (s > 0) {
2116550Skarels 		if (iop->_cnt < s) {
2216550Skarels 			if (iop->_cnt > 0) {
2316550Skarels 				bcopy(ptr, iop->_ptr, iop->_cnt);
2416550Skarels 				ptr += iop->_cnt;
2516550Skarels 				iop->_ptr += iop->_cnt;
2616550Skarels 				s -= iop->_cnt;
2716550Skarels 			}
2817443Sralph 			if (_flsbuf(*(unsigned char *)ptr++, iop) == EOF)
2916550Skarels 				break;
3016550Skarels 			s--;
3116550Skarels 		}
3216550Skarels 		if (iop->_cnt >= s) {
3316550Skarels 			bcopy(ptr, iop->_ptr, s);
3416550Skarels 			iop->_ptr += s;
3516550Skarels 			iop->_cnt -= s;
3616550Skarels 			return (count);
3716550Skarels 		}
3816550Skarels 	}
3916550Skarels 	return (count - ((s + size - 1) / size));
4016550Skarels }
41