mesa: use C locale for _mesa_strtod()
authorBrian Paul <brianp@vmware.com>
Wed, 14 Oct 2009 20:19:03 +0000 (14:19 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 16 Oct 2009 13:36:50 +0000 (07:36 -0600)
_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.

src/mesa/main/imports.c

index 6ffaddcde96e7f1996736847ac9eb49b4c48b958..87cb5ce0fbc76ef13f20cc567cd9ecb22457e7b1 100644 (file)
 #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 */