mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 20:40:05 +00:00
* stdio-common/vfscanf.c: Fix problems in width accounting.
* stdio-common/tst-sscanf.c (double_tests): New tests. (main): Hook them up.
This commit is contained in:
parent
da50f00107
commit
ac2ca0229a
@ -1,5 +1,9 @@
|
||||
2007-02-18 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* stdio-common/vfscanf.c: Fix problems in width accounting.
|
||||
* stdio-common/tst-sscanf.c (double_tests): New tests.
|
||||
(main): Hook them up.
|
||||
|
||||
* stdio-common/vfscanf.c: Remove unused WIDTH handling.
|
||||
More simplifications of floating-point reader.
|
||||
|
||||
|
@ -65,7 +65,7 @@ const long int val_long[] =
|
||||
-12345678, 987654321, 123456789, 987654321, 123456789, 987654321
|
||||
};
|
||||
|
||||
struct int_test
|
||||
struct test
|
||||
{
|
||||
const CHAR *str;
|
||||
const CHAR *fmt;
|
||||
@ -99,6 +99,17 @@ struct int_test
|
||||
{ L("foo \t %bar1"), L("foo%%bar%d"), 1 }
|
||||
};
|
||||
|
||||
struct test double_tests[] =
|
||||
{
|
||||
{ L("-1"), L("%1g"), 0 },
|
||||
{ L("-.1"), L("%2g"), 0 },
|
||||
{ L("-inf"), L("%3g"), 0 },
|
||||
{ L("+0"), L("%1g"), },
|
||||
{ L("-0x1p0"), L("%2g"), 1 },
|
||||
{ L("-..1"), L("%g"), 0 },
|
||||
{ L("-inf"), L("%g"), 1 }
|
||||
};
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
@ -172,5 +183,19 @@ main (void)
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < sizeof (double_tests) / sizeof (double_tests[0]); ++i)
|
||||
{
|
||||
double dummy;
|
||||
int ret;
|
||||
|
||||
if ((ret = SSCANF (double_tests[i].str, double_tests[i].fmt,
|
||||
&dummy)) != double_tests[i].retval)
|
||||
{
|
||||
printf ("double_tests[%d] returned %d != %d\n",
|
||||
i, ret, double_tests[i].retval);
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -1585,6 +1585,8 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
|
||||
case L_('a'):
|
||||
case L_('A'):
|
||||
c = inchar ();
|
||||
if (width > 0)
|
||||
--width;
|
||||
if (__builtin_expect (c == EOF, 0))
|
||||
input_error ();
|
||||
|
||||
@ -1712,7 +1714,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
|
||||
}
|
||||
}
|
||||
|
||||
do
|
||||
while (1)
|
||||
{
|
||||
if (ISDIGIT (c))
|
||||
ADDW (c);
|
||||
@ -1818,10 +1820,13 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (width == 0 || inchar () == EOF)
|
||||
break;
|
||||
|
||||
if (width > 0)
|
||||
--width;
|
||||
}
|
||||
while (width != 0 && inchar () != EOF);
|
||||
|
||||
/* Have we read any character? If we try to read a number
|
||||
in hexadecimal notation and we have read only the `0x'
|
||||
|
Loading…
Reference in New Issue
Block a user