From fae4c299f14fc23e2829c8656992eba21f79242a Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Fri, 17 Mar 2000 20:40:20 +0000 Subject: [PATCH] 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/ChangeLog | 6 ++++++ newlib/libc/stdio/vfscanf.c | 9 +++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 955bb62bb..77bceab56 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,9 @@ +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. + Mon Mar 13 15:22:00 2000 Sergei Organov * libm/mathfp/sf_sqrt.c: Change _DOUBLE_IS_32BITS sqrt call to sqrtf. 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 */