date and time created 84/05/29 13:51:03 by karels
authorMike Karels <karels@ucbvax.Berkeley.EDU>
Wed, 30 May 1984 04:51:03 +0000 (20:51 -0800)
committerMike Karels <karels@ucbvax.Berkeley.EDU>
Wed, 30 May 1984 04:51:03 +0000 (20:51 -0800)
SCCS-vsn: lib/libc/stdio/fread.c 4.1

usr/src/lib/libc/stdio/fread.c [new file with mode: 0644]

diff --git a/usr/src/lib/libc/stdio/fread.c b/usr/src/lib/libc/stdio/fread.c
new file mode 100644 (file)
index 0000000..e7dc261
--- /dev/null
@@ -0,0 +1,35 @@
+/* @(#)fread.c 4.1 (Berkeley) %G% */
+#include       <stdio.h>
+
+fread(ptr, size, count, iop)
+       register char *ptr;
+       unsigned size, count;
+       register FILE *iop;
+{
+       register int s;
+
+       s = size * count;
+       while (s > 0) {
+               if (iop->_cnt < s) {
+                       if (iop->_cnt > 0) {
+                               bcopy(iop->_ptr, ptr, iop->_cnt);
+                               ptr += iop->_cnt;
+                               s -= iop->_cnt;
+                       }
+                       /*
+                        * filbuf clobbers _cnt & _ptr,
+                        * so don't waste time setting them.
+                        */
+                       if ((*ptr++ = _filbuf(iop)) == EOF)
+                               break;
+                       s--;
+               }
+               if (iop->_cnt >= s) {
+                       bcopy(iop->_ptr, ptr, s);
+                       iop->_ptr += s;
+                       iop->_cnt -= s;
+                       return (count);
+               }
+       }
+       return (count - ((s + size - 1) / size));
+}