1 /* 2 * Copyright (c) 1980 Regents of the University of California. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 */ 6 7 #if defined(LIBC_SCCS) && !defined(lint) 8 static char sccsid[] = "@(#)fwrite.c 5.2 (Berkeley) 03/09/86"; 9 #endif LIBC_SCCS and not lint 10 11 #include <stdio.h> 12 13 fwrite(ptr, size, count, iop) 14 register char *ptr; 15 unsigned size, count; 16 register FILE *iop; 17 { 18 register int s; 19 20 s = size * count; 21 if (iop->_flag & _IOLBF) 22 while (s > 0) { 23 if (--iop->_cnt > -iop->_bufsiz && *ptr != '\n') 24 *iop->_ptr++ = *ptr++; 25 else if (_flsbuf(*(unsigned char *)ptr++, iop) == EOF) 26 break; 27 s--; 28 } 29 else while (s > 0) { 30 if (iop->_cnt < s) { 31 if (iop->_cnt > 0) { 32 bcopy(ptr, iop->_ptr, iop->_cnt); 33 ptr += iop->_cnt; 34 iop->_ptr += iop->_cnt; 35 s -= iop->_cnt; 36 } 37 if (_flsbuf(*(unsigned char *)ptr++, iop) == EOF) 38 break; 39 s--; 40 } 41 if (iop->_cnt >= s) { 42 bcopy(ptr, iop->_ptr, s); 43 iop->_ptr += s; 44 iop->_cnt -= s; 45 return (count); 46 } 47 } 48 return (size != 0 ? count - ((s + size - 1) / size) : 0); 49 } 50