This piece of code in localename.c const char *locname = setlocale (category, NULL); LCID lcid;
/* If CATEGORY is LC_ALL, the result might be a semi-colon separated list of locales. We need only one, so we take the one corresponding to LC_CTYPE, as the most important for character translations. */ if (category == LC_ALL && strchr (locname, ';')) locname = setlocale (LC_CTYPE, NULL); can be optimized to const char *locname = setlocale (category == LC_ALL ? LC_CTYPE : category, NULL); using the same reasoning as in <https://lists.gnu.org/archive/html/bug-gnulib/2019-12/msg00129.html>. Even better: This piece of code is in a place where category cannot be LC_ALL (per the specification in localename.h). Thus it can be simplified even further. 2019-12-18 Bruno Haible <br...@clisp.org> localename: Optimize code for native Windows. * lib/localename.c (gl_locale_name_posix): Remove handling of LC_ALL category (not allowed here). diff --git a/lib/localename.c b/lib/localename.c index b6b94c2..d88743e 100644 --- a/lib/localename.c +++ b/lib/localename.c @@ -3242,19 +3242,11 @@ gl_locale_name_posix (int category, const char *categoryname) if (LC_MIN <= category && category <= LC_MAX) { const char *locname = setlocale (category, NULL); - LCID lcid; - - /* If CATEGORY is LC_ALL, the result might be a semi-colon - separated list of locales. We need only one, so we take the - one corresponding to LC_CTYPE, as the most important for - character translations. */ - if (category == LC_ALL && strchr (locname, ';')) - locname = setlocale (LC_CTYPE, NULL); /* Convert locale name to LCID. We don't want to use LocaleNameToLCID because (a) it is only available since Vista, and (b) it doesn't accept locale names returned by 'setlocale'. */ - lcid = get_lcid (locname); + LCID lcid = get_lcid (locname); if (lcid > 0) return gl_locale_name_from_win32_LCID (lcid);