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

Erik Faye-Lund kusmabite at gmail.com
Thu Jun 25 15:58:03 PDT 2015


On Fri, Jun 26, 2015 at 12:44 AM, Matt Turner <mattst88 at gmail.com> wrote:
> 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 :)

Good catch, thanks. Fixed.

I have no strong feelings about patch 7 either way.


More information about the mesa-dev mailing list