From 3a0b53386c2126a44f02c7787381612c4b9434a1 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 13 Aug 2023 15:43:10 +0300 Subject: [PATCH] [KERNEL32] Add CompareStringOrdinal from wine-3.21 --- dll/win32/kernel32/kernel32.spec | 2 +- dll/win32/kernel32/winnls/string/lang.c | 25 ++++++++++++++++++++++++- sdk/include/ndk/rtlfuncs.h | 12 ++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/dll/win32/kernel32/kernel32.spec b/dll/win32/kernel32/kernel32.spec index f1b6314052c7b..2853c50d579ad 100644 --- a/dll/win32/kernel32/kernel32.spec +++ b/dll/win32/kernel32/kernel32.spec @@ -87,7 +87,7 @@ @ stdcall CompareFileTime(ptr ptr) @ stdcall CompareStringA(long long str long str long) @ stdcall -version=0x600+ CompareStringEx(wstr long wstr long wstr long ptr ptr ptr) -@ stdcall -stub -version=0x600+ CompareStringOrdinal(wstr long wstr long long) +@ stdcall -version=0x600+ CompareStringOrdinal(wstr long wstr long long) @ stdcall CompareStringW(long long wstr long wstr long) @ stdcall ConnectNamedPipe(long ptr) ;@ stdcall -arch=x86_64 ConsoleIMERoutine() diff --git a/dll/win32/kernel32/winnls/string/lang.c b/dll/win32/kernel32/winnls/string/lang.c index 51f1edf017582..1d3fdbe4a1bed 100644 --- a/dll/win32/kernel32/winnls/string/lang.c +++ b/dll/win32/kernel32/winnls/string/lang.c @@ -33,7 +33,7 @@ DEBUG_CHANNEL(nls); #endif #undef WINVER -#define WINVER 0x600 +#define WINVER DLL_EXPORT_VERSION /* From winnls.h */ #define LOCALE_NAME_USER_DEFAULT NULL @@ -2765,6 +2765,29 @@ INT WINAPI CompareStringA(LCID lcid, DWORD flags, return ret; } +#if (WINVER >= 0x0600) +/****************************************************************************** + * CompareStringOrdinal (KERNEL32.@) + */ +INT WINAPI CompareStringOrdinal(const WCHAR *str1, INT len1, const WCHAR *str2, INT len2, BOOL ignore_case) +{ + int ret; + + if (!str1 || !str2) + { + SetLastError(ERROR_INVALID_PARAMETER); + return 0; + } + if (len1 < 0) len1 = strlenW(str1); + if (len2 < 0) len2 = strlenW(str2); + + ret = RtlCompareUnicodeStrings( str1, len1, str2, len2, ignore_case ); + if (ret < 0) return CSTR_LESS_THAN; + if (ret > 0) return CSTR_GREATER_THAN; + return CSTR_EQUAL; +} +#endif + #ifdef __REACTOS__ HANDLE NLS_RegOpenKey(HANDLE hRootKey, LPCWSTR szKeyName) #else diff --git a/sdk/include/ndk/rtlfuncs.h b/sdk/include/ndk/rtlfuncs.h index 05dc37686ba96..47830b87990c0 100644 --- a/sdk/include/ndk/rtlfuncs.h +++ b/sdk/include/ndk/rtlfuncs.h @@ -2123,6 +2123,18 @@ RtlCompareUnicodeString( BOOLEAN CaseInsensitive ); +_Must_inspect_result_ +NTSYSAPI +LONG +NTAPI +RtlCompareUnicodeStrings( + _In_reads_(String1Length) PCWCH String1, + _In_ SIZE_T String1Length, + _In_reads_(String2Length) PCWCH String2, + _In_ SIZE_T String2Length, + _In_ BOOLEAN CaseInSensitive +); + NTSYSAPI VOID NTAPI