]> sourceware.org Git - glibc.git/commitdiff
Update.
authorUlrich Drepper <drepper@redhat.com>
Wed, 4 Oct 2000 22:50:20 +0000 (22:50 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 4 Oct 2000 22:50:20 +0000 (22:50 +0000)
2000-10-04  Jakub Jelinek  <jakub@redhat.com>

* stdio-common/vfscanf.c (_IO_vfscanf): For [ conversion do
input_error() if EOF is seen before processing.
* stdio-common/tstscanf.c (main): Add testcase.

ChangeLog
stdio-common/tstscanf.c
stdio-common/vfscanf.c

index 2b8890f6ce546ad61c1e474aa64996fdcb01fc0f..0c53481876eace72d8c049f5aa62a5f08b808f5c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2000-10-04  Jakub Jelinek  <jakub@redhat.com>
+
+       * stdio-common/vfscanf.c (_IO_vfscanf): For [ conversion do
+       input_error() if EOF is seen before processing.
+       * stdio-common/tstscanf.c (main): Add testcase.
+
 2000-10-04  Ulrich Drepper  <drepper@redhat.com>
 
        * argp/argp-help.c: Make sure we get the correct gettext and
index 4732657e532e0e553a431e3985209496b128d5ae..6cf57384161b2780120844127fa35baa4326f734 100644 (file)
@@ -46,6 +46,12 @@ main (int argc, char **argv)
       result = 1;
     }
 
+  if (sscanf ("", "%10[a-z]", buf) != EOF)
+    {
+      fputs ("test failed!\n", stdout);
+      result = 1;
+    }
+
   sscanf ("conversion] Zero flag Ze]ro#\n", "%*[^]] %[^#]\n", buf);
   if (strcmp (buf, "] Zero flag Ze]ro") != 0)
     {
index 43d25ee7a75d86190ad2bf90ea9e65c8834f0ff4..cf3befd39998eada8a7fe03b52b6bc1a81fa95ea 100644 (file)
@@ -1973,13 +1973,13 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
            {
              size_t now = read_in;
 #ifdef COMPILE_WSCANF
+             if (inchar () == WEOF)
+               input_error ();
+
              do
                {
                  wchar_t *runp;
 
-                 if (inchar () == WEOF)
-                   break;
-
                  /* Test whether it's in the scanlist.  */
                  runp = tw;
                  while (runp < wp)
@@ -2063,21 +2063,20 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
                        }
                    }
                }
-             while (--width > 0);
+             while (--width > 0 && inchar () != WEOF);
            out:
 #else
              char buf[MB_LEN_MAX];
              size_t cnt = 0;
              mbstate_t cstate;
 
+             if (inchar () == EOF)
+               input_error ();
+
              memset (&cstate, '\0', sizeof (cstate));
 
              do
                {
-               again:
-                 if (inchar () == EOF)
-                   break;
-
                  if (wp[c] == not_in)
                    {
                      ungetc_not_eof (c, s);
@@ -2097,7 +2096,7 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
                          /* Possibly correct character, just not enough
                             input.  */
                          assert (cnt < MB_CUR_MAX);
-                         goto again;
+                         continue;
                        }
 
                      if (n != cnt)
@@ -2142,8 +2141,11 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
                            }
                        }
                    }
+
+                 if (--width <= 0)
+                   break;
                }
-             while (--width > 0);
+             while (inchar () != EOF);
 
              if (cnt != 0)
                /* We stopped in the middle of recognizing another
@@ -2175,6 +2177,10 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
          else
            {
              size_t now = read_in;
+
+             if (inchar () == EOF)
+               input_error ();
+
 #ifdef COMPILE_WSCANF
 
              memset (&state, '\0', sizeof (state));
@@ -2184,9 +2190,6 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
                  wchar_t *runp;
                  size_t n;
 
-                 if (inchar () == WEOF)
-                   break;
-
                  /* Test whether it's in the scanlist.  */
                  runp = tw;
                  while (runp < wp)
@@ -2275,14 +2278,11 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
                  assert (n <= MB_CUR_MAX);
                  str += n;
                }
-             while (--width > 0);
+             while (--width > 0 && inchar () != WEOF);
            out2:
 #else
              do
                {
-                 if (inchar () == EOF)
-                   break;
-
                  if (wp[c] == not_in)
                    {
                      ungetc_not_eof (c, s);
@@ -2328,7 +2328,7 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
                        }
                    }
                }
-             while (--width > 0);
+             while (--width > 0 && inchar () != EOF);
 #endif
 
              if (now == read_in)
This page took 0.060077 seconds and 5 git commands to generate.