msvcrt: Don't use toupperW in _toupper_l.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Piotr Caban 2020-07-16 14:47:15 +02:00 committed by Alexandre Julliard
parent 55c1a16259
commit 2a0569bbdf
1 changed files with 6 additions and 14 deletions

View File

@ -363,8 +363,7 @@ int CDECL MSVCRT___iscsymf(int c)
int CDECL MSVCRT__toupper_l(int c, MSVCRT__locale_t locale) int CDECL MSVCRT__toupper_l(int c, MSVCRT__locale_t locale)
{ {
MSVCRT_pthreadlocinfo locinfo; MSVCRT_pthreadlocinfo locinfo;
unsigned char str[2], *p = str; unsigned char str[2], *p = str, ret[2];
WCHAR wide, upper;
if(!locale) if(!locale)
locinfo = get_locinfo(); locinfo = get_locinfo();
@ -382,22 +381,15 @@ int CDECL MSVCRT__toupper_l(int c, MSVCRT__locale_t locale)
} }
*p++ = c & 255; *p++ = c & 255;
if(!MultiByteToWideChar(locinfo->lc_codepage, switch(__crtLCMapStringA(locinfo->lc_handle[MSVCRT_LC_CTYPE], LCMAP_UPPERCASE,
MB_ERR_INVALID_CHARS, (char*)str, p-str, &wide, 1)) (char*)str, p-str, (char*)ret, 2, locinfo->lc_codepage, 0))
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)) {
case 0: case 0:
return c; return c;
case 1: case 1:
return str[0]; return ret[0];
default: default:
return str[0] + (str[1]<<8); return ret[0] + (ret[1]<<8);
} }
} }