Mesa (master): glsl: add new glsl_strtof() function

Brian Paul brianp at kemper.freedesktop.org
Fri Jan 25 22:48:26 UTC 2013


Module: Mesa
Branch: master
Commit: 811b5b4b398e4eb1617295fe7937e387ca0bcb44
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=811b5b4b398e4eb1617295fe7937e387ca0bcb44

Author: Brian Paul <brianp at vmware.com>
Date:   Wed Jan 23 09:05:30 2013 -0700

glsl: add new glsl_strtof() function

Note, we could alternately implement this in terms of glsl_strtod()
with a (float) cast.

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

---

 src/glsl/strtod.c |   22 ++++++++++++++++++++++
 src/glsl/strtod.h |    3 +++
 2 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/src/glsl/strtod.c b/src/glsl/strtod.c
index 47c1f0e..5d4346b 100644
--- a/src/glsl/strtod.c
+++ b/src/glsl/strtod.c
@@ -55,3 +55,25 @@ glsl_strtod(const char *s, char **end)
    return strtod(s, end);
 #endif
 }
+
+
+/**
+ * Wrapper around strtof which uses the "C" locale so the decimal
+ * point is always '.'
+ */
+float
+glsl_strtof(const char *s, char **end)
+{
+#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__) && \
+   !defined(__HAIKU__) && !defined(__UCLIBC__)
+   static locale_t loc = NULL;
+   if (!loc) {
+      loc = newlocale(LC_CTYPE_MASK, "C", NULL);
+   }
+   return strtof_l(s, end, loc);
+#elif _XOPEN_SOURCE >= 600 || _ISOC99_SOURCE
+   return strtof(s, end);
+#else
+   return (float) strtod(s, end);
+#endif
+}
diff --git a/src/glsl/strtod.h b/src/glsl/strtod.h
index 0cf6409..ad847db 100644
--- a/src/glsl/strtod.h
+++ b/src/glsl/strtod.h
@@ -34,6 +34,9 @@ extern "C" {
 extern double
 glsl_strtod(const char *s, char **end);
 
+extern float
+glsl_strtof(const char *s, char **end);
+
 
 #ifdef __cplusplus
 }




More information about the mesa-commit mailing list