|
|
1.1 root 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[] = "@(#)fread.c 5.2 (Berkeley) 3/9/86";
9: #endif LIBC_SCCS and not lint
10:
11: #include <stdio.h>
12:
13: fread(ptr, size, count, iop)
14: register char *ptr;
15: unsigned size, count;
16: register FILE *iop;
17: {
18: register int s;
19: int c;
20:
21: s = size * count;
22: while (s > 0) {
23: if (iop->_cnt < s) {
24: if (iop->_cnt > 0) {
25: bcopy(iop->_ptr, ptr, iop->_cnt);
26: ptr += iop->_cnt;
27: s -= iop->_cnt;
28: }
29: /*
30: * filbuf clobbers _cnt & _ptr,
31: * so don't waste time setting them.
32: */
33: if ((c = _filbuf(iop)) == EOF)
34: break;
35: *ptr++ = c;
36: s--;
37: }
38: if (iop->_cnt >= s) {
39: bcopy(iop->_ptr, ptr, s);
40: iop->_ptr += s;
41: iop->_cnt -= s;
42: return (count);
43: }
44: }
45: return (size != 0 ? count - ((s + size - 1) / size) : 0);
46: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.