1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00
* stdlib/strtod_l.c (____STRTOF_INTERNAL): Fix test to recognize
	empty parsed strings.
	* stdlib/Makefile (tests): Add tst-strtod2.
	* stdlib/tst-strtod2.c: New file.
This commit is contained in:
Ulrich Drepper
2006-12-10 01:52:21 +00:00
parent 2282c90c42
commit 405698e946
3 changed files with 16 additions and 10 deletions

View File

@ -1,5 +1,11 @@
2006-12-09 Ulrich Drepper <drepper@redhat.com> 2006-12-09 Ulrich Drepper <drepper@redhat.com>
[BZ #3664]
* stdlib/strtod_l.c (____STRTOF_INTERNAL): Fix test to recognize
empty parsed strings.
* stdlib/Makefile (tests): Add tst-strtod2.
* stdlib/tst-strtod2.c: New file.
[BZ #3673] [BZ #3673]
* stdlib/strtod_l.c (____STRTOF_INTERNAL): Fix exp_limit * stdlib/strtod_l.c (____STRTOF_INTERNAL): Fix exp_limit
computation. computation.

View File

@ -67,7 +67,7 @@ tests := tst-strtol tst-strtod testmb testrand testsort testdiv \
tst-xpg-basename tst-random tst-random2 tst-bsearch \ tst-xpg-basename tst-random tst-random2 tst-bsearch \
tst-limits tst-rand48 bug-strtod tst-setcontext \ tst-limits tst-rand48 bug-strtod tst-setcontext \
test-a64l tst-qsort tst-system testmb2 bug-strtod2 \ test-a64l tst-qsort tst-system testmb2 bug-strtod2 \
tst-atof1 tst-atof2 tst-atof1 tst-atof2 tst-strtod2
include ../Makeconfig include ../Makeconfig

View File

@ -662,20 +662,20 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
/* If no other digit but a '0' is found the result is 0.0. /* If no other digit but a '0' is found the result is 0.0.
Return current read pointer. */ Return current read pointer. */
if ((c < L_('0') || c > L_('9')) if (!((c >= L_('0') && c <= L_('9'))
&& (base == 16 && (c < (CHAR_TYPE) TOLOWER (L_('a')) || (base == 16 && ((CHAR_TYPE) TOLOWER (c) >= L_('a')
|| c > (CHAR_TYPE) TOLOWER (L_('f')))) && (CHAR_TYPE) TOLOWER (c) <= L_('f')))
#ifdef USE_WIDE_CHAR #ifdef USE_WIDE_CHAR
&& c != (wint_t) decimal || c == (wint_t) decimal
#else #else
&& ({ for (cnt = 0; decimal[cnt] != '\0'; ++cnt) || ({ for (cnt = 0; decimal[cnt] != '\0'; ++cnt)
if (decimal[cnt] != cp[cnt]) if (decimal[cnt] != cp[cnt])
break; break;
decimal[cnt] != '\0'; }) decimal[cnt] == '\0'; })
#endif #endif
&& (base == 16 && (cp == start_of_digits || (base == 16 && (cp != start_of_digits
|| (CHAR_TYPE) TOLOWER (c) != L_('p'))) && (CHAR_TYPE) TOLOWER (c) == L_('p')))
&& (base != 16 && (CHAR_TYPE) TOLOWER (c) != L_('e'))) || (base != 16 && (CHAR_TYPE) TOLOWER (c) == L_('e'))))
{ {
#ifdef USE_WIDE_CHAR #ifdef USE_WIDE_CHAR
tp = __correctly_grouped_prefixwc (start_of_digits, cp, thousands, tp = __correctly_grouped_prefixwc (start_of_digits, cp, thousands,