As glibc manual http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library.html says: QUOTE When you read the current locale for category LC_ALL, the value encodes the entire combination of selected locales for all categories. In this case, the value is not just a single locale name. In fact, we don't make any promises about what it looks like. But if you specify the same "locale name" with LC_ALL in a subsequent call to setlocale, it restores the same combination of locale selections. END OF QUOTE
So, any calls setlocale(LC_ALL, *) with analyzing the return value should be eliminated.
Moreover, variable LC_ALL may be absent (my case).
Quick solution: diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c index 9a72a4c..1ac2b4c 100644 --- a/dlls/kernel32/locale.c +++ b/dlls/kernel32/locale.c @@ -512,7 +512,10 @@ static LCID get_env_lcid( UINT *unix_cp, char *buf, *lang,*country,*charset,*dialect,*next; LCID ret = 0;
- if ((lang = setlocale( category, NULL )) && *lang) + if (category == LC_ALL) lang = getenv("LC_ALL"); + else lang = setlocale(category, NULL); + if (!lang || !*lang) lang = getenv("LANG"); + if (lang && *lang) { if (!strcmp(lang,"POSIX") || !strcmp(lang,"C")) goto done;