diff options
author | Brian Paul <[email protected]> | 2013-01-23 09:05:30 -0700 |
---|---|---|
committer | Brian Paul <[email protected]> | 2013-01-25 15:41:39 -0700 |
commit | 811b5b4b398e4eb1617295fe7937e387ca0bcb44 (patch) | |
tree | d2f1e5071152ec7e5623e0cca0ac1c9a6e154422 | |
parent | 6102b9d44104bf8701830ca42dc64ed330e2b8e0 (diff) |
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 <[email protected]>
-rw-r--r-- | src/glsl/strtod.c | 22 | ||||
-rw-r--r-- | 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 47c1f0ed69c..5d4346b5a2e 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 0cf6409d425..ad847dbb010 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 } |