mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-25 06:20:06 +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>
|
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.
|
* stdio-common/vfscanf.c: Remove unused WIDTH handling.
|
||||||
More simplifications of floating-point reader.
|
More simplifications of floating-point reader.
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ const long int val_long[] =
|
|||||||
-12345678, 987654321, 123456789, 987654321, 123456789, 987654321
|
-12345678, 987654321, 123456789, 987654321, 123456789, 987654321
|
||||||
};
|
};
|
||||||
|
|
||||||
struct int_test
|
struct test
|
||||||
{
|
{
|
||||||
const CHAR *str;
|
const CHAR *str;
|
||||||
const CHAR *fmt;
|
const CHAR *fmt;
|
||||||
@ -99,6 +99,17 @@ struct int_test
|
|||||||
{ L("foo \t %bar1"), L("foo%%bar%d"), 1 }
|
{ 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
|
int
|
||||||
main (void)
|
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;
|
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'):
|
||||||
case L_('A'):
|
case L_('A'):
|
||||||
c = inchar ();
|
c = inchar ();
|
||||||
|
if (width > 0)
|
||||||
|
--width;
|
||||||
if (__builtin_expect (c == EOF, 0))
|
if (__builtin_expect (c == EOF, 0))
|
||||||
input_error ();
|
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))
|
if (ISDIGIT (c))
|
||||||
ADDW (c);
|
ADDW (c);
|
||||||
@ -1818,10 +1820,13 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (width == 0 || inchar () == EOF)
|
||||||
|
break;
|
||||||
|
|
||||||
if (width > 0)
|
if (width > 0)
|
||||||
--width;
|
--width;
|
||||||
}
|
}
|
||||||
while (width != 0 && inchar () != EOF);
|
|
||||||
|
|
||||||
/* Have we read any character? If we try to read a number
|
/* Have we read any character? If we try to read a number
|
||||||
in hexadecimal notation and we have read only the `0x'
|
in hexadecimal notation and we have read only the `0x'
|
||||||
|
Loading…
Reference in New Issue
Block a user