diff options
author | Brian Paul <[email protected]> | 2009-10-14 14:19:03 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2009-10-16 07:36:50 -0600 |
commit | 89b31c9619449d5c9b8ebe4e245c2a926e3583e6 (patch) | |
tree | 394d052f502e2b179c7f1c9a74bfab9dbc1cf499 /src/mesa/main/imports.c | |
parent | 3f30b0709b5a71915df336194f9f805e4c306cef (diff) |
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.
Diffstat (limited to 'src/mesa/main/imports.c')
-rw-r--r-- | src/mesa/main/imports.c | 12 |
1 files changed, 12 insertions, 0 deletions
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 <locale.h> +#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 */ |