Module: wine Branch: master Commit: a980fa0d786fe9a156b3b76f42e43c069ddde505 URL: https://source.winehq.org/git/wine.git/?a=commit;h=a980fa0d786fe9a156b3b76f4...
Author: Alexandre Julliard julliard@winehq.org Date: Tue May 24 18:21:08 2022 +0200
kernelbase: Don't ignore the specified locale in CompareStringW.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernelbase/locale.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/dlls/kernelbase/locale.c b/dlls/kernelbase/locale.c index 692bba4316e..47d49a17cbe 100644 --- a/dlls/kernelbase/locale.c +++ b/dlls/kernelbase/locale.c @@ -4033,7 +4033,31 @@ INT WINAPI DECLSPEC_HOTPATCH CompareStringA( LCID lcid, DWORD flags, const char INT WINAPI DECLSPEC_HOTPATCH CompareStringW( LCID lcid, DWORD flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2 ) { - return CompareStringEx( NULL, flags, str1, len1, str2, len2, NULL, NULL, 0 ); + const WCHAR *locale = LOCALE_NAME_USER_DEFAULT; + const NLS_LOCALE_LCID_INDEX *entry; + + switch (lcid) + { + case LOCALE_NEUTRAL: + case LOCALE_USER_DEFAULT: + case LOCALE_SYSTEM_DEFAULT: + case LOCALE_CUSTOM_DEFAULT: + case LOCALE_CUSTOM_UNSPECIFIED: + case LOCALE_CUSTOM_UI_DEFAULT: + break; + default: + if (lcid == user_lcid || lcid == system_lcid) break; + if (!(entry = find_lcid_entry( lcid ))) + { + WARN( "unknown locale %04lx\n", lcid ); + SetLastError( ERROR_INVALID_PARAMETER ); + return 0; + } + locale = locale_strings + entry->name + 1; + break; + } + + return CompareStringEx( locale, flags, str1, len1, str2, len2, NULL, NULL, 0 ); }