summaryrefslogtreecommitdiff
path: root/lib/localename.c
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2019-12-18 17:03:42 +0100
committerBruno Haible <bruno@clisp.org>2019-12-18 17:03:42 +0100
commitb7e45cc191f3ba8389ecc08942c149add83a367e (patch)
treed95992c5c2294ac39fcbb1df5703614f724e387c /lib/localename.c
parent3a310962887322e0b94708984886de643f94f8a5 (diff)
downloadgnulib-b7e45cc191f3ba8389ecc08942c149add83a367e.tar.gz
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.
Diffstat (limited to 'lib/localename.c')
-rw-r--r--lib/localename.c13
1 files changed, 10 insertions, 3 deletions
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