about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/stdio/__scanf.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/stdio/__scanf.c b/src/stdio/__scanf.c
index 185615d3..062327d7 100644
--- a/src/stdio/__scanf.c
+++ b/src/stdio/__scanf.c
@@ -22,8 +22,7 @@ static int read(rctx_t *r)
 
 static void unread(rctx_t *r)
 {
-	//if (r->u || r->w < 0) return;
-	if (r->w < 0) return;
+	if (r->c < 0 || r->w < 0) return;
 	r->w++;
 	r->u = 1;
 }
@@ -99,7 +98,9 @@ int __scanf(rctx_t *r, const wchar_t *fmt, va_list ap)
 		} else if (*p != '%' || p[1] == '%') {
 			if (*p == '%') p++;
 			r->w = 1;
-			if (*p++ != read(r))
+			if ((c = read(r)) < 0)
+				goto input_fail;
+			if (*p++ != c)
 				goto match_fail;
 			continue;
 		}