+/* @(#)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));
+}