Index: lib/libc/stdio/fread.c =================================================================== RCS file: /cvsroot/src/lib/libc/stdio/fread.c,v retrieving revision 1.22 diff -u -r1.22 fread.c --- lib/libc/stdio/fread.c 15 Mar 2012 18:22:30 -0000 1.22 +++ lib/libc/stdio/fread.c 22 Feb 2020 21:27:11 -0000 @@ -68,16 +68,21 @@ _DIAGASSERT(buf != NULL); FLOCKFILE(fp); - if (fp->_r < 0) - fp->_r = 0; total = resid; p = buf; + + if (fp->_r <= 0) { + /* Nothing to read on enter, refill the buffers. */ + goto refill; + } + while (resid > (size_t)(r = fp->_r)) { (void)memcpy(p, fp->_p, (size_t)r); fp->_p += r; /* fp->_r = 0 ... done in __srefill */ p += r; resid -= r; +refill: if (__srefill(fp)) { /* no more input: return partial result */ FUNLOCKFILE(fp);