From b7e45cc191f3ba8389ecc08942c149add83a367e Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Wed, 18 Dec 2019 17:03:42 +0100 Subject: [PATCH] localename: Ensure multithread-safety in future changes. * lib/localename.c (setlocale): Reference the system's setlocale(). (get_locale_t_name): Invoke setlocale_null instead of setlocale. (gl_locale_name_posix): Likewise. * modules/localename (Depends-on): Add setlocale-null. --- ChangeLog | 8 ++++++++ lib/localename.c | 13 ++++++++++--- modules/localename | 1 + 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1c31c803e8..ff5ecb86e6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2019-12-18 Bruno Haible + + localename: Ensure multithread-safety in future changes. + * lib/localename.c (setlocale): Reference the system's setlocale(). + (get_locale_t_name): Invoke setlocale_null instead of setlocale. + (gl_locale_name_posix): Likewise. + * modules/localename (Depends-on): Add setlocale-null. + 2019-12-18 Bruno Haible setlocale-null: Make API more useful. diff --git a/lib/localename.c b/lib/localename.c index d88743e4ce..65dddeb378 100644 --- a/lib/localename.c +++ b/lib/localename.c @@ -1151,6 +1151,10 @@ extern char * getlocalename_l(int, locale_t); # endif #endif +/* We want to use the system's setlocale() function here, not the gnulib + override. */ +#undef setlocale + #if HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.4 or newer */ @@ -2725,7 +2729,7 @@ get_locale_t_name (int category, locale_t locale) if (locale == LC_GLOBAL_LOCALE) { /* Query the global locale. */ - const char *name = setlocale (category, NULL); + const char *name = setlocale_null (category); if (name != NULL) return struniq (name); else @@ -3241,7 +3245,10 @@ gl_locale_name_posix (int category, const char *categoryname) #if defined WINDOWS_NATIVE if (LC_MIN <= category && category <= LC_MAX) { - const char *locname = setlocale (category, NULL); + const char *locname = + /* setlocale_null (category) is identical to setlocale (category, NULL) + on this platform. */ + setlocale (category, NULL); /* Convert locale name to LCID. We don't want to use LocaleNameToLCID because (a) it is only available since Vista, @@ -3258,7 +3265,7 @@ gl_locale_name_posix (int category, const char *categoryname) /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'. On some systems this can be done by the 'setlocale' function itself. */ #if defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL - locname = setlocale (category, NULL); + locname = setlocale_null (category); #else /* On other systems we ignore what setlocale reports and instead look at the environment variables directly. This is necessary diff --git a/modules/localename b/modules/localename index 9eed220e7f..c528acb51a 100644 --- a/modules/localename +++ b/modules/localename @@ -18,6 +18,7 @@ flexmember strdup lock langinfo +setlocale-null configure.ac: gl_LOCALENAME -- 2.39.5