about summary refs log tree commit diff
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;
 }