Piotr Caban : msvcrt: Don't use strcmpiW in _wcsicmp_l.

Alexandre Julliard julliard at winehq.org
Tue Jul 14 16:23:39 CDT 2020


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue Jul 14 20:22:53 2020 +0200

msvcrt: Don't use strcmpiW in _wcsicmp_l.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msvcrt/wcs.c | 69 ++++++++++++++++++++++++++++++-------------------------
 1 file changed, 38 insertions(+), 31 deletions(-)

diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c
index b6da06ce74..0db911fe81 100644
--- a/dlls/msvcrt/wcs.c
+++ b/dlls/msvcrt/wcs.c
@@ -86,12 +86,48 @@ MSVCRT_wchar_t* CDECL MSVCRT__wcsdup( const MSVCRT_wchar_t* str )
   return ret;
 }
 
+/*********************************************************************
+ *              _towlower_l (MSVCRT.@)
+ */
+int CDECL MSVCRT__towlower_l(MSVCRT_wint_t c, MSVCRT__locale_t locale)
+{
+    MSVCRT_pthreadlocinfo locinfo;
+
+    if(!locale)
+        locinfo = get_locinfo();
+    else
+        locinfo = locale->locinfo;
+
+    if(!locinfo->lc_handle[MSVCRT_LC_CTYPE]) {
+        if(c >= 'A' && c <= 'Z')
+            return c + 'a' - 'A';
+        return c;
+    }
+
+    return tolowerW(c);
+}
+
+/*********************************************************************
+ *              towlower (MSVCRT.@)
+ */
+int CDECL MSVCRT_towlower(MSVCRT_wint_t c)
+{
+    return MSVCRT__towlower_l(c, NULL);
+}
+
 INT CDECL MSVCRT__wcsicmp_l(const MSVCRT_wchar_t *str1, const MSVCRT_wchar_t *str2, MSVCRT__locale_t locale)
 {
+    MSVCRT_wchar_t c1, c2;
+
     if(!MSVCRT_CHECK_PMT(str1 != NULL) || !MSVCRT_CHECK_PMT(str2 != NULL))
         return MSVCRT__NLSCMPERROR;
 
-    return strcmpiW(str1, str2);
+    do
+    {
+        c1 = MSVCRT__towlower_l(*str1++, locale);
+        c2 = MSVCRT__towlower_l(*str2++, locale);
+    } while(c1 && (c1 == c2));
+    return c1 - c2;
 }
 
 /*********************************************************************
@@ -99,7 +135,7 @@ INT CDECL MSVCRT__wcsicmp_l(const MSVCRT_wchar_t *str1, const MSVCRT_wchar_t *st
  */
 INT CDECL MSVCRT__wcsicmp( const MSVCRT_wchar_t* str1, const MSVCRT_wchar_t* str2 )
 {
-    return strcmpiW( str1, str2 );
+    return MSVCRT__wcsicmp_l(str1, str2, NULL);
 }
 
 /*********************************************************************
@@ -2540,35 +2576,6 @@ int CDECL MSVCRT_towupper(MSVCRT_wint_t c)
     return MSVCRT__towupper_l(c, NULL);
 }
 
-/*********************************************************************
- *              _towlower_l (MSVCRT.@)
- */
-int CDECL MSVCRT__towlower_l(MSVCRT_wint_t c, MSVCRT__locale_t locale)
-{
-    MSVCRT_pthreadlocinfo locinfo;
-
-    if(!locale)
-        locinfo = get_locinfo();
-    else
-        locinfo = locale->locinfo;
-
-    if(!locinfo->lc_handle[MSVCRT_LC_CTYPE]) {
-        if(c >= 'A' && c <= 'Z')
-            return c + 'a' - 'A';
-        return c;
-    }
-
-    return tolowerW(c);
-}
-
-/*********************************************************************
- *              towlower (MSVCRT.@)
- */
-int CDECL MSVCRT_towlower(MSVCRT_wint_t c)
-{
-    return MSVCRT__towlower_l(c, NULL);
-}
-
 /*********************************************************************
  *              wcschr (MSVCRT.@)
  */




More information about the wine-cvs mailing list