From 955aa2dc77774fadef9549321f5473e41eb78b53 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 12 Jul 2004 17:50:11 +0000 Subject: (STRTOD_L): New macro. (C_STRTOD) [defined LC_ALL_MASK]: Use it, so that the code is reentrant on platforms that have strtod_l. --- lib/c-strtod.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'lib') diff --git a/lib/c-strtod.c b/lib/c-strtod.c index 25d895107..ae0511034 100644 --- a/lib/c-strtod.c +++ b/lib/c-strtod.c @@ -32,9 +32,11 @@ #if LONG # define C_STRTOD c_strtold # define DOUBLE long double +# define STRTOD_L strtold_l #else # define C_STRTOD c_strtod # define DOUBLE double +# define STRTOD_L strtod_l #endif /* c_strtold falls back on strtod if strtold isn't declared. */ @@ -48,6 +50,15 @@ DOUBLE C_STRTOD (char const *nptr, char **endptr) { DOUBLE r; + +#ifdef LC_ALL_MASK + + locale_t c_locale = newlocale (LC_ALL_MASK, "C", 0); + r = STRTOD_L (nptr, endptr, c_locale); + freelocale (c_locale); + +#else + char *saved_locale = setlocale (LC_NUMERIC, NULL); if (saved_locale) @@ -64,5 +75,7 @@ C_STRTOD (char const *nptr, char **endptr) free (saved_locale); } +#endif + return r; } -- cgit v1.2.3-54-g00ecf