From 2a0569bbdfc4cf882ac0c949dfc9579ddf792af7 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Thu, 16 Jul 2020 14:47:15 +0200 Subject: [PATCH] msvcrt: Don't use toupperW in _toupper_l. Signed-off-by: Piotr Caban Signed-off-by: Alexandre Julliard --- 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 7322ea47c28..e051c015211 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); } }