Stefan Leichter : kernel32: Return a dummy value in GetSystemPreferredUILanguages.
Alexandre Julliard
julliard at winehq.org
Mon Aug 22 07:32:39 CDT 2016
Module: wine
Branch: stable
Commit: 7d01dc440d7b93c51c6a1ecdcafc462ab8b04872
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7d01dc440d7b93c51c6a1ecdcafc462ab8b04872
Author: Stefan Leichter <Stefan.Leichter at 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 at camLine.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 9cd67d2a5e7a7ad441287e803c166523814e2bcb)
Signed-off-by: Michael Stefaniuc <mstefani at 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);
More information about the wine-cvs
mailing list