Paul Gofman : kernel32: Implement SetUserGeoName().

Alexandre Julliard julliard at winehq.org
Tue Mar 9 14:55:18 CST 2021


Module: wine
Branch: master
Commit: a430a69f8ba5372e478b8dd463f1347b6c35c38e
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=a430a69f8ba5372e478b8dd463f1347b6c35c38e

Author: Paul Gofman <pgofman at codeweavers.com>
Date:   Mon Mar  8 19:34:39 2021 +0300

kernel32: Implement SetUserGeoName().

Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/kernel32.spec     |  1 +
 dlls/kernelbase/kernelbase.spec |  1 +
 dlls/kernelbase/locale.c        | 46 +++++++++++++++++++++++++++++++++++++++++
 include/winnls.h                |  1 +
 4 files changed, 49 insertions(+)

diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index 5dee1d9b906..0eb66a0e3b0 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -1482,6 +1482,7 @@
 @ stdcall -arch=x86_64 SetUmsThreadInformation(ptr long ptr long)
 @ stdcall -import SetUnhandledExceptionFilter(ptr)
 @ stdcall -import SetUserGeoID(long)
+@ stdcall -import SetUserGeoName(wstr)
 @ stub SetVDMCurrentDirectories
 @ stdcall SetVolumeLabelA(str str)
 @ stdcall SetVolumeLabelW(wstr wstr)
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
index a0cd5f82a18..08a2f726817 100644
--- a/dlls/kernelbase/kernelbase.spec
+++ b/dlls/kernelbase/kernelbase.spec
@@ -1509,6 +1509,7 @@
 @ stdcall SetTokenInformation(long long ptr long)
 @ stdcall SetUnhandledExceptionFilter(ptr)
 @ stdcall SetUserGeoID(long)
+@ stdcall SetUserGeoName(wstr)
 @ stdcall SetWaitableTimer(long ptr long ptr ptr long)
 @ stdcall SetWaitableTimerEx(long ptr long ptr ptr ptr long)
 @ stdcall -arch=i386,x86_64 SetXStateFeaturesMask(ptr int64)
diff --git a/dlls/kernelbase/locale.c b/dlls/kernelbase/locale.c
index 7126dc74d01..24e8cd3f338 100644
--- a/dlls/kernelbase/locale.c
+++ b/dlls/kernelbase/locale.c
@@ -5927,3 +5927,49 @@ INT WINAPI GetUserDefaultGeoName(LPWSTR geo_name, int count)
     lstrcpyW( geo_name, buffer );
     return size;
 }
+
+
+/***********************************************************************
+ *	SetUserDefaultGeoName  (kernelbase.@)
+ */
+BOOL WINAPI SetUserGeoName(PWSTR geo_name)
+{
+    unsigned int i;
+    WCHAR *endptr;
+    int uncode;
+
+    TRACE( "geo_name %s.\n", debugstr_w( geo_name ));
+
+    if (!geo_name)
+    {
+        SetLastError( ERROR_INVALID_PARAMETER );
+        return FALSE;
+    }
+
+    if (lstrlenW( geo_name ) == 3)
+    {
+        uncode = wcstol( geo_name, &endptr, 10 );
+        if (!uncode || endptr != geo_name + 3)
+        {
+            SetLastError( ERROR_INVALID_PARAMETER );
+            return FALSE;
+        }
+        for (i = 0; i < ARRAY_SIZE(geoinfodata); ++i)
+            if (geoinfodata[i].uncode == uncode)
+                break;
+    }
+    else
+    {
+        if (!lstrcmpiW( geo_name, L"XX" ))
+            return SetUserGeoID( 39070 );
+        for (i = 0; i < ARRAY_SIZE(geoinfodata); ++i)
+            if (!lstrcmpiW( geo_name, geoinfodata[i].iso2W ))
+                break;
+    }
+    if (i == ARRAY_SIZE(geoinfodata))
+    {
+        SetLastError( ERROR_INVALID_PARAMETER );
+        return FALSE;
+    }
+    return SetUserGeoID( geoinfodata[i].id );
+}
diff --git a/include/winnls.h b/include/winnls.h
index 04838cfa8d7..4b1323cc694 100644
--- a/include/winnls.h
+++ b/include/winnls.h
@@ -983,6 +983,7 @@ WINBASEAPI BOOL        WINAPI SetThreadLocale(LCID);
 WINBASEAPI BOOL        WINAPI SetThreadPreferredUILanguages(DWORD,PCZZWSTR,PULONG);
 WINBASEAPI LANGID      WINAPI SetThreadUILanguage(LANGID);
 WINBASEAPI BOOL        WINAPI SetUserGeoID(GEOID);
+WINBASEAPI BOOL        WINAPI SetUserGeoName(PWSTR);
 WINBASEAPI INT         WINAPI WideCharToMultiByte(UINT,DWORD,LPCWSTR,INT,LPSTR,INT,LPCSTR,LPBOOL);
 WINBASEAPI INT         WINAPI FindNLSStringEx(const WCHAR *,DWORD,const WCHAR *,INT,const WCHAR *,INT,INT *,NLSVERSIONINFO *,void *,LPARAM);
 




More information about the wine-cvs mailing list