Module: wine Branch: stable Commit: 7d01dc440d7b93c51c6a1ecdcafc462ab8b04872 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7d01dc440d7b93c51c6a1ecdca...
Author: Stefan Leichter Stefan.Leichter@camLine.com Date: Wed Feb 10 22:46:38 2016 +0100
kernel32: Return a dummy value in GetSystemPreferredUILanguages.
Signed-off-by: Stefan Leichter Stefan.Leichter@camLine.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit 9cd67d2a5e7a7ad441287e803c166523814e2bcb) Signed-off-by: Michael Stefaniuc mstefani@winehq.org
---
dlls/kernel32/locale.c | 43 ++++++++++++++++++++++++++++++++++++++++--- dlls/kernel32/tests/locale.c | 10 ---------- 2 files changed, 40 insertions(+), 13 deletions(-)
diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c index 07e3973..d5625ea 100644 --- a/dlls/kernel32/locale.c +++ b/dlls/kernel32/locale.c @@ -1053,6 +1053,8 @@ INT WINAPI GetSystemDefaultLocaleName(LPWSTR localename, INT len) */ BOOL WINAPI GetSystemPreferredUILanguages(DWORD flags, ULONG* count, WCHAR* buffer, ULONG* size) { + LCTYPE type; + int lsize; if (flags & ~(MUI_LANGUAGE_NAME | MUI_LANGUAGE_ID | MUI_MACHINE_LANGUAGE_SETTINGS)) { SetLastError(ERROR_INVALID_PARAMETER); @@ -1069,9 +1071,44 @@ BOOL WINAPI GetSystemPreferredUILanguages(DWORD flags, ULONG* count, WCHAR* buff return FALSE; }
- FIXME("(0x%x %p %p %p) stub\n", flags, count, buffer, size); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; + FIXME("(0x%x %p %p %p) returning a dummy value (current locale)\n", flags, count, buffer, size); + + if (flags & MUI_LANGUAGE_ID) + type = LOCALE_ILANGUAGE; + else + type = LOCALE_SNAME; + + lsize = GetLocaleInfoW(LOCALE_SYSTEM_DEFAULT, type, NULL, 0); + if (!lsize) + { + /* keep last error from callee */ + return FALSE; + } + lsize++; + if (!*size) + { + *size = lsize; + *count = 1; + return TRUE; + } + + if (lsize > *size) + { + SetLastError(ERROR_INSUFFICIENT_BUFFER); + return FALSE; + } + + if (!GetLocaleInfoW(LOCALE_SYSTEM_DEFAULT, type, buffer, *size)) + { + /* keep last error from callee */ + return FALSE; + } + + buffer[lsize-1] = 0; + *size = lsize; + *count = 1; + TRACE("returned variable content: %d, "%s", %d\n", *count, debugstr_w(buffer), *size); + return TRUE; }
/*********************************************************************** diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c index 13c1de6..c9dce5a 100644 --- a/dlls/kernel32/tests/locale.c +++ b/dlls/kernel32/tests/locale.c @@ -4609,10 +4609,8 @@ static void test_GetSystemPreferredUILanguages(void) size = 0; SetLastError(0xdeadbeef); ret = pGetSystemPreferredUILanguages(0, &count, NULL, &size); - todo_wine ok(ret, "Expected GetSystemPreferredUILanguages to succeed\n"); ok(count, "Expected count > 0\n"); - todo_wine ok(size % 6 == 1, "Expected size (%d) %% 6 == 1\n", size);
count = 0xdeadbeef; @@ -4643,20 +4641,16 @@ static void test_GetSystemPreferredUILanguages(void) size = 0; SetLastError(0xdeadbeef); ret = pGetSystemPreferredUILanguages(MUI_LANGUAGE_ID | MUI_MACHINE_LANGUAGE_SETTINGS, &count, NULL, &size); - todo_wine ok(ret, "Expected GetSystemPreferredUILanguages to succeed\n"); ok(count, "Expected count > 0\n"); - todo_wine ok(size % 5 == 1, "Expected size (%d) %% 5 == 1\n", size);
count = 0xdeadbeef; size = 0; SetLastError(0xdeadbeef); ret = pGetSystemPreferredUILanguages(MUI_LANGUAGE_NAME | MUI_MACHINE_LANGUAGE_SETTINGS, &count, NULL, &size); - todo_wine ok(ret, "Expected GetSystemPreferredUILanguages to succeed\n"); ok(count, "Expected count > 0\n"); - todo_wine ok(size % 6 == 1, "Expected size (%d) %% 6 == 1\n", size);
/* second parameter @@ -4682,20 +4676,16 @@ static void test_GetSystemPreferredUILanguages(void) size_id = 0; SetLastError(0xdeadbeef); ret = pGetSystemPreferredUILanguages(MUI_LANGUAGE_ID, &count, NULL, &size_id); - todo_wine ok(ret, "Expected GetSystemPreferredUILanguages to succeed\n"); ok(count, "Expected count > 0\n"); - todo_wine ok(size_id % 5 == 1, "Expected size (%d) %% 5 == 1\n", size_id);
count = 0xdeadbeef; size_name = 0; SetLastError(0xdeadbeef); ret = pGetSystemPreferredUILanguages(MUI_LANGUAGE_NAME, &count, NULL, &size_name); - todo_wine ok(ret, "Expected GetSystemPreferredUILanguages to succeed\n"); ok(count, "Expected count > 0\n"); - todo_wine ok(size_name % 6 == 1, "Expected size (%d) %% 6 == 1\n", size_name);
size_buffer = max(size_id, size_name);