From: Paul Eggert Date: Mon, 12 Jul 2004 17:50:11 +0000 (+0000) Subject: (STRTOD_L): New macro. X-Git-Tag: v5.3.0~1118 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=955aa2dc77774fadef9549321f5473e41eb78b53;p=thirdparty%2Fcoreutils.git (STRTOD_L): New macro. (C_STRTOD) [defined LC_ALL_MASK]: Use it, so that the code is reentrant on platforms that have strtod_l. --- diff --git a/lib/c-strtod.c b/lib/c-strtod.c index 25d8951075..ae0511034d 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; }