From 7d68a8ec676b26556393ea0ef067dddb1b5fc24f Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 11 Jul 2002 08:33:33 +0000 Subject: [PATCH] Update. 2002-07-11 Ulrich Drepper * stdio-common/vfscanf.c (inchar): Restore errno from previous underflow operation if c == (W)EOF. --- ChangeLog | 5 +++++ stdio-common/vfscanf.c | 12 ++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2f95a04..203dcdc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2002-07-11 Ulrich Drepper + + * stdio-common/vfscanf.c (inchar): Restore errno from previous + underflow operation if c == (W)EOF. + 2002-07-03 Jakub Jelinek * stdio-common/printf_fp.c (__printf_fp.c): If _FPIO_CONST_SHIFT is diff --git a/stdio-common/vfscanf.c b/stdio-common/vfscanf.c index 9586ab6..b563a04 100644 --- a/stdio-common/vfscanf.c +++ b/stdio-common/vfscanf.c @@ -78,9 +78,10 @@ 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) @@ -108,9 +109,10 @@ 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 [^...]. */ -- 2.7.4