Module: wine Branch: master Commit: 0b35b779151d766f6741bc32d3b6d3c8d81f1cc4 URL: https://source.winehq.org/git/wine.git/?a=commit;h=0b35b779151d766f6741bc32d...
Author: Piotr Caban piotr@codeweavers.com Date: Thu Jul 16 14:46:47 2020 +0200
msvcrt: Don't use tolowerW in _tolower_l.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/msvcrt/ctype.c | 20 ++++++-------------- dlls/msvcrt/msvcrt.h | 1 + 2 files changed, 7 insertions(+), 14 deletions(-)
diff --git a/dlls/msvcrt/ctype.c b/dlls/msvcrt/ctype.c index 9e2d029950..7322ea47c2 100644 --- a/dlls/msvcrt/ctype.c +++ b/dlls/msvcrt/ctype.c @@ -425,8 +425,7 @@ int CDECL MSVCRT__toupper(int c) int CDECL MSVCRT__tolower_l(int c, MSVCRT__locale_t locale) { MSVCRT_pthreadlocinfo locinfo; - unsigned char str[2], *p = str; - WCHAR wide, lower; + unsigned char str[2], *p = str, ret[2];
if(!locale) locinfo = get_locinfo(); @@ -444,22 +443,15 @@ int CDECL MSVCRT__tolower_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; - - lower = tolowerW(wide); - if(lower == wide) - return str[0] + (str[1]<<8); - - switch(WideCharToMultiByte(locinfo->lc_codepage, 0, - &lower, 1, (char*)str, 2, NULL, NULL)) { + switch(__crtLCMapStringA(locinfo->lc_handle[MSVCRT_LC_CTYPE], LCMAP_LOWERCASE, + (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); } }
diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index ef1154ce76..cc4541ccee 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -1130,6 +1130,7 @@ void __cdecl MSVCRT__free_locale(MSVCRT__locale_t); void free_locinfo(MSVCRT_pthreadlocinfo) DECLSPEC_HIDDEN; void free_mbcinfo(MSVCRT_pthreadmbcinfo) DECLSPEC_HIDDEN; int _setmbcp_l(int, LCID, MSVCRT_pthreadmbcinfo) DECLSPEC_HIDDEN; +int __cdecl __crtLCMapStringA(LCID, DWORD, const char*, int, char*, int, unsigned int, int) DECLSPEC_HIDDEN;
#ifndef __WINE_MSVCRT_TEST int __cdecl MSVCRT__write(int,const void*,unsigned int);