Author: akhaldi Date: Mon Jun 1 09:56:53 2015 New Revision: 67986
URL: http://svn.reactos.org/svn/reactos?rev=67986&view=rev Log: [KERNEL32] Sync CompareStringW() with Wine Staging 1.7.37. CORE-9246
Modified: trunk/reactos/dll/win32/kernel32/winnls/string/lang.c
Modified: trunk/reactos/dll/win32/kernel32/winnls/string/lang.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/winnls/s... ============================================================================== --- trunk/reactos/dll/win32/kernel32/winnls/string/lang.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/kernel32/winnls/string/lang.c [iso-8859-1] Mon Jun 1 09:56:53 2015 @@ -1759,10 +1759,16 @@ * * See CompareStringA. */ -INT WINAPI CompareStringW(LCID lcid, DWORD style, +INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2) { + static const DWORD supported_flags = NORM_IGNORECASE|NORM_IGNORENONSPACE|NORM_IGNORESYMBOLS|SORT_STRINGSORT + |NORM_IGNOREKANATYPE|NORM_IGNOREWIDTH|LOCALE_USE_CP_ACP + |NORM_LINGUISTIC_CASING|LINGUISTIC_IGNORECASE|0x10000000; + static DWORD semistub_flags = NORM_LINGUISTIC_CASING|LINGUISTIC_IGNORECASE|0x10000000; + /* 0x10000000 is related to diacritics in Arabic, Japanese, and Hebrew */ INT ret; +
if (!str1 || !str2) { @@ -1770,21 +1776,22 @@ return 0; }
- if( style & ~(NORM_IGNORECASE|NORM_IGNORENONSPACE|NORM_IGNORESYMBOLS| - SORT_STRINGSORT|NORM_IGNOREKANATYPE|NORM_IGNOREWIDTH|LOCALE_USE_CP_ACP|0x10000000) ) + if (flags & ~supported_flags) { SetLastError(ERROR_INVALID_FLAGS); return 0; }
- /* this style is related to diacritics in Arabic, Japanese, and Hebrew */ - if (style & 0x10000000) - WARN("Ignoring unknown style 0x10000000\n"); + if (flags & semistub_flags) + { + FIXME("semi-stub behavior for flag(s) 0x%x\n", flags & semistub_flags); + semistub_flags &= ~flags; + }
if (len1 < 0) len1 = strlenW(str1); if (len2 < 0) len2 = strlenW(str2);
- ret = wine_compare_string(style, str1, len1, str2, len2); + ret = wine_compare_string(flags, str1, len1, str2, len2);
if (ret) /* need to translate result */ return (ret < 0) ? CSTR_LESS_THAN : CSTR_GREATER_THAN; @@ -1798,7 +1805,7 @@ * * PARAMS * lcid [I] LCID for the comparison - * style [I] Flags for the comparison (NORM_ constants from "winnls.h"). + * flags [I] Flags for the comparison (NORM_ constants from "winnls.h"). * str1 [I] First string to compare * len1 [I] Length of str1, or -1 if str1 is NUL terminated * str2 [I] Second string to compare