1*16549Skarels /* @(#)fread.c 4.1 (Berkeley) 05/29/84 */ 2*16549Skarels #include <stdio.h> 3*16549Skarels 4*16549Skarels fread(ptr, size, count, iop) 5*16549Skarels register char *ptr; 6*16549Skarels unsigned size, count; 7*16549Skarels register FILE *iop; 8*16549Skarels { 9*16549Skarels register int s; 10*16549Skarels 11*16549Skarels s = size * count; 12*16549Skarels while (s > 0) { 13*16549Skarels if (iop->_cnt < s) { 14*16549Skarels if (iop->_cnt > 0) { 15*16549Skarels bcopy(iop->_ptr, ptr, iop->_cnt); 16*16549Skarels ptr += iop->_cnt; 17*16549Skarels s -= iop->_cnt; 18*16549Skarels } 19*16549Skarels /* 20*16549Skarels * filbuf clobbers _cnt & _ptr, 21*16549Skarels * so don't waste time setting them. 22*16549Skarels */ 23*16549Skarels if ((*ptr++ = _filbuf(iop)) == EOF) 24*16549Skarels break; 25*16549Skarels s--; 26*16549Skarels } 27*16549Skarels if (iop->_cnt >= s) { 28*16549Skarels bcopy(iop->_ptr, ptr, s); 29*16549Skarels iop->_ptr += s; 30*16549Skarels iop->_cnt -= s; 31*16549Skarels return (count); 32*16549Skarels } 33*16549Skarels } 34*16549Skarels return (count - ((s + size - 1) / size)); 35*16549Skarels } 36