[Mesa-dev] [PATCH 1/2] glsl: add new glsl_strtof() function
Ian Romanick
idr at freedesktop.org
Thu Jan 24 12:05:39 PST 2013
On 01/23/2013 12:16 PM, Brian Paul wrote:
> Note, we could alternately implement this in terms of glsl_strtod()
> with a (float) cast.
Series is
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..46f4dc5 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 strtod 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-dev
mailing list