Piotr Caban : msvcrt: Don't use toupperW in _toupper_l.

Alexandre Julliard julliard at winehq.org
Thu Jul 16 19:01:22 CDT 2020


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu Jul 16 14:47:15 2020 +0200

msvcrt: Don't use toupperW in _toupper_l.

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

---

 dlls/msvcrt/ctype.c | 20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)

diff --git a/dlls/msvcrt/ctype.c b/dlls/msvcrt/ctype.c
index 7322ea47c2..e051c01521 100644
--- a/dlls/msvcrt/ctype.c
+++ b/dlls/msvcrt/ctype.c
@@ -363,8 +363,7 @@ int CDECL MSVCRT___iscsymf(int c)
 int CDECL MSVCRT__toupper_l(int c, MSVCRT__locale_t locale)
 {
     MSVCRT_pthreadlocinfo locinfo;
-    unsigned char str[2], *p = str;
-    WCHAR wide, upper;
+    unsigned char str[2], *p = str, ret[2];
 
     if(!locale)
         locinfo = get_locinfo();
@@ -382,22 +381,15 @@ int CDECL MSVCRT__toupper_l(int c, MSVCRT__locale_t locale)
     }
     *p++ = c & 255;
 
-    if(!MultiByteToWideChar(locinfo->lc_codepage,
-                MB_ERR_INVALID_CHARS, (char*)str, p-str, &wide, 1))
-        return c;
-
-    upper = toupperW(wide);
-    if(upper == wide)
-        return str[0] + (str[1]<<8);
-
-    switch(WideCharToMultiByte(locinfo->lc_codepage, 0,
-                &upper, 1, (char*)str, 2, NULL, NULL)) {
+    switch(__crtLCMapStringA(locinfo->lc_handle[MSVCRT_LC_CTYPE], LCMAP_UPPERCASE,
+                (char*)str, p-str, (char*)ret, 2, locinfo->lc_codepage, 0))
+    {
     case 0:
         return c;
     case 1:
-        return str[0];
+        return ret[0];
     default:
-        return str[0] + (str[1]<<8);
+        return ret[0] + (ret[1]<<8);
     }
 }
 




More information about the wine-cvs mailing list