OSDN Git Service

Fri Mar 17 15:37:00 2000 Jeff Johnston <jjohnstn@cygnus.com>
authorjjohnstn <jjohnstn>
Fri, 17 Mar 2000 20:40:20 +0000 (20:40 +0000)
committerjjohnstn <jjohnstn>
Fri, 17 Mar 2000 20:40:20 +0000 (20:40 +0000)
        * 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
newlib/libc/stdio/vfscanf.c

index 955bb62..77bceab 100644 (file)
@@ -1,3 +1,9 @@
+Fri Mar 17 15:37:00 2000  Jeff Johnston <jjohnstn@cygnus.com>
+
+       * 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 <osv@javad.ru>
 
         * libm/mathfp/sf_sqrt.c: Change _DOUBLE_IS_32BITS sqrt call to sqrtf.
index 00fd98d..f1d328a 100644 (file)
@@ -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 */