--- /dev/null
+--- refill.c.orig 2008-01-24 17:13:42.000000000 -0800
++++ refill.c 2008-02-17 13:19:27.000000000 -0800
+@@ -68,8 +68,8 @@ lflush(FILE *fp)
+ * Refill a stdio buffer.
+ * Return EOF on eof or error, 0 otherwise.
+ */
+-int
+-__srefill(FILE *fp)
++__private_extern__ int
++__srefill0(FILE *fp)
+ {
+
+ /* make sure stdio is set up */
+@@ -134,6 +134,13 @@ __srefill(FILE *fp)
+ if ((fp->_flags & (__SLBF|__SWR)) == (__SLBF|__SWR))
+ __sflush(fp);
+ }
++ return (1);
++}
++
++__private_extern__ int
++__srefill1(FILE *fp)
++{
++
+ fp->_p = fp->_bf._base;
+ fp->_r = _sread(fp, (char *)fp->_p, fp->_bf._size);
+ fp->_flags &= ~__SMOD; /* buffer contents are again pristine */
+@@ -148,3 +155,13 @@ __srefill(FILE *fp)
+ }
+ return (0);
+ }
++
++int
++__srefill(FILE *fp)
++{
++ int ret;
++
++ if ((ret = __srefill0(fp)) <= 0)
++ return ret;
++ return __srefill1(fp);
++}