[Mesa-dev] [PATCH v2 5/7] util: port _mesa_strto[df] to C

Matt Turner mattst88 at gmail.com
Thu Jun 25 15:44:01 PDT 2015


On Thu, Jun 25, 2015 at 2:05 PM, Erik Faye-Lund <kusmabite at gmail.com> wrote:
> _mesa_strtod and _mesa_strtof are only used from the GLSL compiler and
> the ARB_[vertex|fragment]_program code, meaning that the locale doesn't
> need to be initialized before the first OpenGL context gets initialized.
>
> So let's use explicit initialization from the one-time init code instead
> of depending on a C++ compiler to initialize at image-load time.
>
> Signed-off-by: Erik Faye-Lund <kusmabite at gmail.com>
> Reviewed-by: Matt Turner <mattst88 at gmail.com>
> ---
>  src/glsl/glcpp/glcpp.c    |  3 ++
>  src/glsl/main.cpp         |  3 ++
>  src/mesa/main/context.c   |  3 ++
>  src/util/Makefile.sources |  2 +-
>  src/util/strtod.c         | 78 +++++++++++++++++++++++++++++++++++++++++++++++
>  src/util/strtod.cpp       | 75 ---------------------------------------------
>  src/util/strtod.h         |  3 ++
>  7 files changed, 91 insertions(+), 76 deletions(-)
>  create mode 100644 src/util/strtod.c
>  delete mode 100644 src/util/strtod.cpp
>
> diff --git a/src/glsl/glcpp/glcpp.c b/src/glsl/glcpp/glcpp.c
> index 5144516..c62f4ef 100644
> --- a/src/glsl/glcpp/glcpp.c
> +++ b/src/glsl/glcpp/glcpp.c
> @@ -29,6 +29,7 @@
>  #include "glcpp.h"
>  #include "main/mtypes.h"
>  #include "main/shaderobj.h"
> +#include "util/strtod.h"
>
>  extern int glcpp_parser_debug;
>
> @@ -168,6 +169,8 @@ main (int argc, char *argv[])
>         if (shader == NULL)
>            return 1;
>
> +       _mesa_locale_init();
> +
>         ret = glcpp_preprocess(ctx, &shader, &info_log, NULL, &gl_ctx);
>
>         printf("%s", shader);
> diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
> index 2341298..58651df 100644
> --- a/src/glsl/main.cpp
> +++ b/src/glsl/main.cpp
> @@ -38,6 +38,7 @@
>  #include "program/hash_table.h"
>  #include "loop_analysis.h"
>  #include "standalone_scaffolding.h"
> +#include "util/strtod.h"
>
>  static int glsl_version = 330;
>
> @@ -46,6 +47,8 @@ initialize_context(struct gl_context *ctx, gl_api api)
>  {
>     initialize_context_to_defaults(ctx, api);
>
> +   _mesa_locale_init();
> +
>     /* The standalone compiler needs to claim support for almost
>      * everything in order to compile the built-in functions.
>      */
> diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
> index c4af8ea..e68de68 100644
> --- a/src/mesa/main/context.c
> +++ b/src/mesa/main/context.c
> @@ -120,6 +120,7 @@
>  #include "shaderobj.h"
>  #include "shaderimage.h"
>  #include "util/simple_list.h"
> +#include "util/strtod.h"
>  #include "state.h"
>  #include "stencil.h"
>  #include "texcompress_s3tc.h"
> @@ -374,6 +375,8 @@ one_time_init( struct gl_context *ctx )
>        assert( sizeof(GLint) == 4 );
>        assert( sizeof(GLuint) == 4 );
>
> +      _mesa_locale_init();
> +
>        _mesa_one_time_init_extension_overrides();
>
>        _mesa_get_cpu_features();
> diff --git a/src/util/Makefile.sources b/src/util/Makefile.sources
> index dc55939..82df3bc 100644
> --- a/src/util/Makefile.sources
> +++ b/src/util/Makefile.sources
> @@ -19,7 +19,7 @@ MESA_UTIL_FILES :=    \
>         set.c \
>         set.h \
>         simple_list.h \
> -       strtod.cpp \
> +       strtod.c \
>         strtod.h \
>         texcompress_rgtc_tmp.h \
>         u_atomic.h
> diff --git a/src/util/strtod.c b/src/util/strtod.c
> new file mode 100644
> index 0000000..e5e6f76
> --- /dev/null
> +++ b/src/util/strtod.c
> @@ -0,0 +1,78 @@
> +/*
> + * Copyright 2010 VMware, Inc.
> + * All Rights Reserved.
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the
> + * "Software"), to deal in the Software without restriction, including
> + * without limitation the rights to use, copy, modify, merge, publish,
> + * distribute, sub license, and/or sell copies of the Software, and to
> + * permit persons to whom the Software is furnished to do so, subject to
> + * the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the
> + * next paragraph) shall be included in all copies or substantial portions
> + * of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
> + * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
> + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> + */
> +
> +
> +#include <stdlib.h>
> +
> +#ifdef _GNU_SOURCE
> +#include <locale.h>
> +#ifdef HAVE_XLOCALE_H
> +#include <xlocale.h>
> +static locale_t loc;
> +static int initialized;

This is unused until commit 7 (and I don't see a lot of value in patch
7, but maybe I'm just not seeing it :)


More information about the mesa-dev mailing list