summaryrefslogtreecommitdiff
path: root/src/stdio/__uflow.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/stdio/__uflow.c')
-rw-r--r--src/stdio/__uflow.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/stdio/__uflow.c b/src/stdio/__uflow.c
index 5a51d610..544dda98 100644
--- a/src/stdio/__uflow.c
+++ b/src/stdio/__uflow.c
@@ -1,7 +1,11 @@
#include "stdio_impl.h"
+/* This function will never be called if there is already data
+ * buffered for reading. Thus we can get by with very few branches. */
+
int __uflow(FILE *f)
{
- if (__underflow(f) < 0) return EOF;
- else return *f->rpos++;
+ unsigned char c = EOF;
+ if (f->rend || !__toread(f)) f->read(f, &c, 1);
+ return c;
}