[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