Used by Marvel's Avengers.
Signed-off-by: Paul Gofman pgofman@codeweavers.com --- v2: - refine patch name; - handle in MSVCRT_locale_to_LCID(); - remove redundant 'if' in test.
dlls/msvcrt/locale.c | 17 +++++++++++++++++ dlls/msvcrt/tests/locale.c | 7 +++++++ 2 files changed, 24 insertions(+)
diff --git a/dlls/msvcrt/locale.c b/dlls/msvcrt/locale.c index 9a10ceabc4e..5654c941e0b 100644 --- a/dlls/msvcrt/locale.c +++ b/dlls/msvcrt/locale.c @@ -308,6 +308,23 @@ LCID MSVCRT_locale_to_LCID(const char *locale, unsigned short *codepage, BOOL *s return data->cached_lcid; }
+ if (!strcmp(locale, ".OCP")) { + lcid = GetUserDefaultLCID(); + + if (codepage) + { + DWORD value; + + GetLocaleInfoA(lcid, LOCALE_IDEFAULTCODEPAGE | LOCALE_RETURN_NUMBER, + (char *)&value, sizeof(value)); + *codepage = value; + } + if (sname) + *sname = FALSE; + + return lcid; + } + memset(&search, 0, sizeof(locale_search_t));
cp = strchr(locale, '.'); diff --git a/dlls/msvcrt/tests/locale.c b/dlls/msvcrt/tests/locale.c index 08abac00bed..a385d3e25c4 100644 --- a/dlls/msvcrt/tests/locale.c +++ b/dlls/msvcrt/tests/locale.c @@ -45,6 +45,7 @@ static void test_setlocale(void) "LC_MONETARY=Greek_Greece.1253;LC_NUMERIC=Polish_Poland.1250;LC_TIME=C";
char *ret, buf[100]; + char *ptr;
ret = setlocale(20, "C"); ok(ret == NULL, "ret = %s\n", ret); @@ -612,6 +613,12 @@ static void test_setlocale(void) ok(!strcmp(ret, buf), "ret = %s, expected %s\n", ret, buf); }
+ ret = setlocale(LC_ALL, ".OCP"); + ok(ret != NULL, "ret == NULL\n"); + ptr = strchr(ret, '.'); + GetLocaleInfoA(GetUserDefaultLCID(), LOCALE_IDEFAULTCODEPAGE, buf, sizeof(buf)); + ok(ptr && !strcmp(ptr + 1, buf), "ret %s, buf %s.\n", ret, buf); + ret = setlocale(LC_ALL, "English_United States.UTF8"); ok(ret == NULL, "ret != NULL\n");