Alexandre Julliard : kernelbase: Use RtlMultiByteToUnicodeN in IsChar* functions.
Alexandre Julliard
julliard at winehq.org
Mon Apr 11 15:54:59 CDT 2022
Module: wine
Branch: master
Commit: 23834ee3b8d0a3d73eed593404748abd7d29d0d9
URL: https://source.winehq.org/git/wine.git/?a=commit;h=23834ee3b8d0a3d73eed593404748abd7d29d0d9
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Apr 11 17:01:36 2022 +0200
kernelbase: Use RtlMultiByteToUnicodeN in IsChar* functions.
In case the Ansi codepage was set to UTF-8.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/kernelbase/locale.c | 30 ++++++++++++++++++++----------
1 file changed, 20 insertions(+), 10 deletions(-)
diff --git a/dlls/kernelbase/locale.c b/dlls/kernelbase/locale.c
index 54d4a838731..1e477a449e1 100644
--- a/dlls/kernelbase/locale.c
+++ b/dlls/kernelbase/locale.c
@@ -5580,8 +5580,10 @@ INT WINAPI DECLSPEC_HOTPATCH IdnToUnicode( DWORD flags, const WCHAR *src, INT sr
*/
BOOL WINAPI DECLSPEC_HOTPATCH IsCharAlphaA( CHAR c )
{
- WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
- return !!(get_char_type( CT_CTYPE1, wc ) & C1_ALPHA);
+ WCHAR wc;
+ DWORD reslen;
+ RtlMultiByteToUnicodeN( &wc, sizeof(WCHAR), &reslen, &c, 1 );
+ return reslen && (get_char_type( CT_CTYPE1, wc ) & C1_ALPHA);
}
@@ -5599,8 +5601,10 @@ BOOL WINAPI DECLSPEC_HOTPATCH IsCharAlphaW( WCHAR wc )
*/
BOOL WINAPI DECLSPEC_HOTPATCH IsCharAlphaNumericA( CHAR c )
{
- WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
- return !!(get_char_type( CT_CTYPE1, wc ) & (C1_ALPHA | C1_DIGIT));
+ WCHAR wc;
+ DWORD reslen;
+ RtlMultiByteToUnicodeN( &wc, sizeof(WCHAR), &reslen, &c, 1 );
+ return reslen && (get_char_type( CT_CTYPE1, wc ) & (C1_ALPHA | C1_DIGIT));
}
@@ -5645,8 +5649,10 @@ BOOL WINAPI DECLSPEC_HOTPATCH IsCharDigitW( WCHAR wc )
*/
BOOL WINAPI DECLSPEC_HOTPATCH IsCharLowerA( CHAR c )
{
- WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
- return !!(get_char_type( CT_CTYPE1, wc ) & C1_LOWER);
+ WCHAR wc;
+ DWORD reslen;
+ RtlMultiByteToUnicodeN( &wc, sizeof(WCHAR), &reslen, &c, 1 );
+ return reslen && (get_char_type( CT_CTYPE1, wc ) & C1_LOWER);
}
@@ -5673,8 +5679,10 @@ BOOL WINAPI DECLSPEC_HOTPATCH IsCharPunctW( WCHAR wc )
*/
BOOL WINAPI DECLSPEC_HOTPATCH IsCharSpaceA( CHAR c )
{
- WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
- return !!(get_char_type( CT_CTYPE1, wc ) & C1_SPACE);
+ WCHAR wc;
+ DWORD reslen;
+ RtlMultiByteToUnicodeN( &wc, sizeof(WCHAR), &reslen, &c, 1 );
+ return reslen && (get_char_type( CT_CTYPE1, wc ) & C1_SPACE);
}
@@ -5692,8 +5700,10 @@ BOOL WINAPI DECLSPEC_HOTPATCH IsCharSpaceW( WCHAR wc )
*/
BOOL WINAPI DECLSPEC_HOTPATCH IsCharUpperA( CHAR c )
{
- WCHAR wc = nls_info.AnsiTableInfo.MultiByteTable[(unsigned char)c];
- return !!(get_char_type( CT_CTYPE1, wc ) & C1_UPPER);
+ WCHAR wc;
+ DWORD reslen;
+ RtlMultiByteToUnicodeN( &wc, sizeof(WCHAR), &reslen, &c, 1 );
+ return reslen && (get_char_type( CT_CTYPE1, wc ) & C1_UPPER);
}
More information about the wine-cvs
mailing list