Update.
authorUlrich Drepper <drepper@redhat.com>
Thu, 11 Jul 2002 08:33:33 +0000 (08:33 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 11 Jul 2002 08:33:33 +0000 (08:33 +0000)
2002-07-11  Ulrich Drepper  <drepper@redhat.com>

* stdio-common/vfscanf.c (inchar): Restore errno from previous
underflow operation if c == (W)EOF.

ChangeLog
stdio-common/vfscanf.c

index 2f95a04..203dcdc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2002-07-11  Ulrich Drepper  <drepper@redhat.com>
+
+       * stdio-common/vfscanf.c (inchar): Restore errno from previous
+       underflow operation if c == (W)EOF.
+
 2002-07-03  Jakub Jelinek  <jakub@redhat.com>
 
        * stdio-common/printf_fp.c (__printf_fp.c): If _FPIO_CONST_SHIFT is
index 9586ab6..b563a04 100644 (file)
                                     INTUSE(_IO_sputbackwc) (s, c))))
 #  define ungetc_not_eof(c, s) ((void) (--read_in,                           \
                                         INTUSE(_IO_sputbackwc) (s, c)))
-#  define inchar()     (c == WEOF ? WEOF                                     \
+#  define inchar()     (c == WEOF ? ((errno = inchar_errno), WEOF)           \
                         : ((c = _IO_getwc_unlocked (s)),                     \
-                           (void) (c != WEOF && ++read_in), c))
+                           (void) (c != WEOF                                 \
+                                   ? ++read_in : (inchar_errno = errno)), c))
 
 #  define MEMCPY(d, s, n) __wmemcpy (d, s, n)
 #  define ISSPACE(Ch)    iswspace (Ch)
                                     INTUSE(_IO_sputbackc) (s, (unsigned char) c))))
 #  define ungetc_not_eof(c, s) ((void) (--read_in,                           \
                                         INTUSE(_IO_sputbackc) (s, (unsigned char) c)))
-#  define inchar()     (c == EOF ? EOF                                       \
+#  define inchar()     (c == EOF ? ((errno = inchar_errno), EOF)             \
                         : ((c = _IO_getc_unlocked (s)),                      \
-                           (void) (c != EOF && ++read_in), c))
+                           (void) (c != EOF                                  \
+                                   ? ++read_in : (inchar_errno = errno)), c))
 #  define MEMCPY(d, s, n) memcpy (d, s, n)
 #  define ISSPACE(Ch)    isspace (Ch)
 #  define ISDIGIT(Ch)    isdigit (Ch)
@@ -272,6 +274,8 @@ __vfscanf (FILE *s, const char *format, va_list argptr)
   register int width;          /* Maximum field width.  */
   register int flags;          /* Modifiers for current format element.  */
 
+  /* Errno of last failed inchar call.  */
+  int inchar_errno = 0;
   /* Status for reading F-P nums.  */
   char got_dot, got_e, negative;
   /* If a [...] is a [^...].  */