From: Brian Paul Date: Wed, 14 Oct 2009 20:19:03 +0000 (-0600) Subject: mesa: use C locale for _mesa_strtod() X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=89b31c9619449d5c9b8ebe4e245c2a926e3583e6;p=mesa.git mesa: use C locale for _mesa_strtod() _mesa_strtod() is used for shader/program parsing where the decimal point character is always '.' Use strtod_l() with a "C" locale to ensure correct string->double conversion when the actual locale uses another character such as ',' for the decimal point. Fixes bug 24531. --- diff --git a/src/mesa/main/imports.c b/src/mesa/main/imports.c index 6ffaddcde96..87cb5ce0fbc 100644 --- a/src/mesa/main/imports.c +++ b/src/mesa/main/imports.c @@ -48,6 +48,10 @@ #include "context.h" #include "version.h" +#ifdef _GNU_SOURCE +#include +#endif + #define MAXSTRING 4000 /* for vsnprintf() */ @@ -908,7 +912,15 @@ _mesa_atoi(const char *s) double _mesa_strtod( const char *s, char **end ) { +#ifdef _GNU_SOURCE + static locale_t loc = NULL; + if (!loc) { + loc = newlocale(LC_CTYPE_MASK, "C", NULL); + } + return strtod_l(s, end, loc); +#else return strtod(s, end); +#endif } /** Compute simple checksum/hash for a string */