[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