mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-09 10:50:08 +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>
|
2007-02-18 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* stdio-common/vfscanf.c: Remove unused WIDTH handling.
|
* stdio-common/vfscanf.c: Remove unused WIDTH handling.
|
||||||
|
More simplifications of floating-point reader.
|
||||||
|
|
||||||
* stdio-common/Makefile (tests): Add tst-swscanf.
|
* stdio-common/Makefile (tests): Add tst-swscanf.
|
||||||
* stdio-common/tst-sscanf.c: Make tests usable for 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))
|
if (__builtin_expect (width == 0 || inchar () == EOF, 0))
|
||||||
/* EOF is only an input error before we read any chars. */
|
/* EOF is only an input error before we read any chars. */
|
||||||
conv_error ();
|
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)
|
if (width > 0)
|
||||||
--width;
|
--width;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user