mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 19:00:07 +00:00
..
More simplifications of floating-point reader.
This commit is contained in:
parent
e9bb524634
commit
da50f00107
@ -1,6 +1,7 @@
|
||||
2007-02-18 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* stdio-common/vfscanf.c: Remove unused WIDTH handling.
|
||||
More simplifications of floating-point reader.
|
||||
|
||||
* stdio-common/Makefile (tests): Add tst-swscanf.
|
||||
* stdio-common/tst-sscanf.c: Make tests usable for swscanf
|
||||
|
@ -1597,63 +1597,6 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
|
||||
if (__builtin_expect (width == 0 || inchar () == EOF, 0))
|
||||
/* EOF is only an input error before we read any chars. */
|
||||
conv_error ();
|
||||
if (! ISDIGIT (c) && TOLOWER (c) != L_('i')
|
||||
&& TOLOWER (c) != L_('n'))
|
||||
{
|
||||
#ifdef COMPILE_WSCANF
|
||||
if (__builtin_expect (c != decimal, 0))
|
||||
{
|
||||
/* This is no valid number. */
|
||||
ungetc (c, s);
|
||||
conv_error ();
|
||||
}
|
||||
#else
|
||||
/* Match against the decimal point. At this point
|
||||
we are taking advantage of the fact that we can
|
||||
push more than one character back. This is
|
||||
(almost) never necessary since the decimal point
|
||||
string hopefully never contains more than one
|
||||
byte. */
|
||||
const char *cmpp = decimal;
|
||||
int avail = width > 0 ? width : INT_MAX;
|
||||
|
||||
while ((unsigned char) *cmpp == c && avail-- > 0)
|
||||
if (*++cmpp == '\0')
|
||||
break;
|
||||
else
|
||||
{
|
||||
if (inchar () == EOF)
|
||||
break;
|
||||
}
|
||||
|
||||
if (__builtin_expect (*cmpp != '\0', 0))
|
||||
{
|
||||
/* This is no valid number. */
|
||||
while (1)
|
||||
{
|
||||
ungetc (c, s);
|
||||
if (cmpp == decimal)
|
||||
break;
|
||||
c = (unsigned char) *--cmpp;
|
||||
}
|
||||
|
||||
conv_error ();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Add all the characters. */
|
||||
for (cmpp = decimal; *cmpp != '\0'; ++cmpp)
|
||||
ADDW ((unsigned char) *cmpp);
|
||||
if (width > 0)
|
||||
width = avail;
|
||||
got_dot = 1;
|
||||
|
||||
c = inchar ();
|
||||
}
|
||||
if (width > 0)
|
||||
width = avail;
|
||||
#endif
|
||||
}
|
||||
if (width > 0)
|
||||
--width;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user