From fae4c299f14fc23e2829c8656992eba21f79242a Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Fri, 17 Mar 2000 20:40:20 +0000 Subject: Fri Mar 17 15:37:00 2000 Jeff Johnston * libc/stdio/vfscanf.c (__svfscanf): Fixed floating point code to update nread as each character is processed instead of using buffer contents which throw away leading zeroes. --- newlib/libc/stdio/vfscanf.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'newlib/libc') diff --git a/newlib/libc/stdio/vfscanf.c b/newlib/libc/stdio/vfscanf.c index 00fd98d76..f1d328a20 100644 --- a/newlib/libc/stdio/vfscanf.c +++ b/newlib/libc/stdio/vfscanf.c @@ -765,6 +765,7 @@ __svfscanf (fp, fmt0, ap) *p++ = c; width--; fskip: + ++nread; if (--fp->_r > 0) fp->_p++; else @@ -786,15 +787,20 @@ __svfscanf (fp, fmt0, ap) { /* no digits at all */ while (p > buf) - ungetc (*(u_char *)-- p, fp); + { + ungetc (*(u_char *)-- p, fp); + --nread; + } goto match_failure; } /* just a bad exponent (e and maybe sign) */ c = *(u_char *)-- p; + --nread; if (c != 'e' && c != 'E') { _CAST_VOID ungetc (c, fp); /* sign */ c = *(u_char *)-- p; + --nread; } _CAST_VOID ungetc (c, fp); } @@ -839,7 +845,6 @@ __svfscanf (fp, fmt0, ap) } nassigned++; } - nread += p - buf; break; } #endif /* FLOATING_POINT */ -- cgit v1.2.3