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