diff options
author | Bruno Haible <bruno@clisp.org> | 2019-12-18 17:03:42 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2019-12-18 17:03:42 +0100 |
commit | b7e45cc191f3ba8389ecc08942c149add83a367e (patch) | |
tree | d95992c5c2294ac39fcbb1df5703614f724e387c /lib/localename.c | |
parent | 3a310962887322e0b94708984886de643f94f8a5 (diff) | |
download | gnulib-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.c | 13 |
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 |