From 8625fbfe454b90a1a6f24e365cb0fff672414cff Mon Sep 17 00:00:00 2001 From: Manuel Novoa III Date: Fri, 23 Mar 2001 02:32:39 +0000 Subject: Bug fix from Peter Kjellerstedt . --- libc/stdio/scanf.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'libc') diff --git a/libc/stdio/scanf.c b/libc/stdio/scanf.c index 0f1843a4d..a8f9f0ed0 100644 --- a/libc/stdio/scanf.c +++ b/libc/stdio/scanf.c @@ -139,6 +139,7 @@ struct scan_cookie { FILE *fp; int nread; int width; + int width_flag; int ungot_char; int ungot_flag; }; @@ -166,6 +167,7 @@ static void init_scan_cookie(struct scan_cookie *sc, FILE *fp) { sc->fp = fp; sc->nread = 0; + sc->width_flag = 0; sc->ungot_flag = 0; if ((sc->ungot_char = getc(fp)) > 0) { /* not EOF or EOS */ sc->ungot_flag = 1; @@ -182,6 +184,7 @@ static int scan_getc_nw(struct scan_cookie *sc) if (sc->ungot_char > 0) { ++sc->nread; } + sc->width_flag = 0; return sc->ungot_char; } @@ -190,6 +193,7 @@ static int scan_getc(struct scan_cookie *sc) if (sc->ungot_flag == 0) { sc->ungot_char = getc(sc->fp); } + sc->width_flag = 1; if (--sc->width < 0) { sc->ungot_flag = 1; return 0; @@ -207,6 +211,9 @@ static void scan_ungetc(struct scan_cookie *sc) assert(sc->width < 0); return; } + if (sc->width_flag) { + ++sc->width; + } sc->ungot_flag = 1; if (sc->ungot_char > 0) { /* not EOF or EOS */ --sc->nread; -- cgit v1.2.3