summary refs log tree commit diff
path: root/stdlib/strtod_l.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2005-09-28 06:09:24 +0000
committerUlrich Drepper <drepper@redhat.com>2005-09-28 06:09:24 +0000
commit1873e3cd1a7f5173d20d9060f3be825f31a53a39 (patch)
treed741711c2683919648a9fab68ded25c3a2ba4fc2 /stdlib/strtod_l.c
parenteb793d1e84fe39243b246e24e0a835ccc6a4b1bb (diff)
downloadglibc-1873e3cd1a7f5173d20d9060f3be825f31a53a39.tar.gz
glibc-1873e3cd1a7f5173d20d9060f3be825f31a53a39.tar.xz
glibc-1873e3cd1a7f5173d20d9060f3be825f31a53a39.zip
[BZ #1230]
2005-09-27  Ulrich Drepper  <drepper@redhat.com>
	[BZ #1230]
	* stdlib/strtod_l.c (STRNCASECMP): Always use C locale object.
	(TOLOWER_C): Define.  Use it when recognizing inf and nan.
	* stdlib/Makefile (tests): Add bug-strtod2.
	* stdlib/bug-strtod2.c: New file.
Diffstat (limited to 'stdlib/strtod_l.c')
-rw-r--r--stdlib/strtod_l.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c
index a656789f4c..3a1c1ebd4b 100644
--- a/stdlib/strtod_l.c
+++ b/stdlib/strtod_l.c
@@ -1,5 +1,5 @@
 /* Convert string representing a number to float value, using given locale.
-   Copyright (C) 1997,98,2002, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1997,98,2002,2004,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -100,7 +100,9 @@ extern unsigned long long int ____strtoull_l_internal (const char *, char **,
 # define ISDIGIT(Ch) __iswdigit_l ((Ch), loc)
 # define ISXDIGIT(Ch) __iswxdigit_l ((Ch), loc)
 # define TOLOWER(Ch) __towlower_l ((Ch), loc)
-# define STRNCASECMP(S1, S2, N) __wcsncasecmp_l ((S1), (S2), (N), loc)
+# define TOLOWER_C(Ch) __towlower_l ((Ch), &_nl_C_locobj)
+# define STRNCASECMP(S1, S2, N) \
+  __wcsncasecmp_l ((S1), (S2), (N), &_nl_C_locobj)
 # define STRTOULL(S, E, B) ____wcstoull_l_internal ((S), (E), (B), 0, loc)
 #else
 # define STRING_TYPE char
@@ -110,7 +112,9 @@ extern unsigned long long int ____strtoull_l_internal (const char *, char **,
 # define ISDIGIT(Ch) __isdigit_l ((Ch), loc)
 # define ISXDIGIT(Ch) __isxdigit_l ((Ch), loc)
 # define TOLOWER(Ch) __tolower_l ((Ch), loc)
-# define STRNCASECMP(S1, S2, N) __strncasecmp_l ((S1), (S2), (N), loc)
+# define TOLOWER_C(Ch) __tolower_l ((Ch), &_nl_C_locobj)
+# define STRNCASECMP(S1, S2, N) \
+  __strncasecmp_l ((S1), (S2), (N), &_nl_C_locobj)
 # define STRTOULL(S, E, B) ____strtoull_l_internal ((S), (E), (B), 0, loc)
 #endif
 
@@ -554,7 +558,7 @@ INTERNAL (__STRTOF) (nptr, endptr, group, loc)
   else if (c < L_('0') || c > L_('9'))
     {
       /* Check for `INF' or `INFINITY'.  */
-      if (TOLOWER (c) == L_('i') && STRNCASECMP (cp, L_("inf"), 3) == 0)
+      if (TOLOWER_C (c) == L_('i') && STRNCASECMP (cp, L_("inf"), 3) == 0)
 	{
 	  /* Return +/- infinity.  */
 	  if (endptr != NULL)
@@ -565,7 +569,7 @@ INTERNAL (__STRTOF) (nptr, endptr, group, loc)
 	  return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL;
 	}
 
-      if (TOLOWER (c) == L_('n') && STRNCASECMP (cp, L_("nan"), 3) == 0)
+      if (TOLOWER_C (c) == L_('n') && STRNCASECMP (cp, L_("nan"), 3) == 0)
 	{
 	  /* Return NaN.  */
 	  FLOAT retval = NAN;