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@intel.com>
This commit is contained in:
Brian Paul 2013-01-23 09:05:30 -07:00
parent 6102b9d441
commit 811b5b4b39
2 changed files with 25 additions and 0 deletions

View file

@ -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
}

View file

@ -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
}