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