Module: wine Branch: master Commit: 19c05e60a3cbb7dfa040b919e8783d571fc6ae01 URL: https://source.winehq.org/git/wine.git/?a=commit;h=19c05e60a3cbb7dfa040b919e...
Author: Piotr Caban piotr@codeweavers.com Date: Thu Jul 16 15:32:53 2020 +0200
msvcrt: Add _ismbcalnum_l implementation.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
.../api-ms-win-crt-multibyte-l1-1-0.spec | 2 +- .../api-ms-win-crt-private-l1-1-0.spec | 2 +- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/mbcs.c | 58 ++++++++++++++-------- dlls/msvcrt/msvcrt.h | 1 + dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 +- 11 files changed, 49 insertions(+), 30 deletions(-)
diff --git a/dlls/api-ms-win-crt-multibyte-l1-1-0/api-ms-win-crt-multibyte-l1-1-0.spec b/dlls/api-ms-win-crt-multibyte-l1-1-0/api-ms-win-crt-multibyte-l1-1-0.spec index 2e20080ea3..991ad90a92 100644 --- a/dlls/api-ms-win-crt-multibyte-l1-1-0/api-ms-win-crt-multibyte-l1-1-0.spec +++ b/dlls/api-ms-win-crt-multibyte-l1-1-0/api-ms-win-crt-multibyte-l1-1-0.spec @@ -25,7 +25,7 @@ @ cdecl _ismbbtrail(long) ucrtbase._ismbbtrail @ cdecl _ismbbtrail_l(long ptr) ucrtbase._ismbbtrail_l @ cdecl _ismbcalnum(long) ucrtbase._ismbcalnum -@ stub _ismbcalnum_l +@ cdecl _ismbcalnum_l(long ptr) ucrtbase._ismbcalnum_l @ cdecl _ismbcalpha(long) ucrtbase._ismbcalpha @ stub _ismbcalpha_l @ stub _ismbcblank diff --git a/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec b/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec index b428f26edb..afcac3bacb 100644 --- a/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec +++ b/dlls/api-ms-win-crt-private-l1-1-0/api-ms-win-crt-private-l1-1-0.spec @@ -398,7 +398,7 @@ @ cdecl _o__ismbbtrail(long) ucrtbase._o__ismbbtrail @ cdecl _o__ismbbtrail_l(long ptr) ucrtbase._o__ismbbtrail_l @ cdecl _o__ismbcalnum(long) ucrtbase._o__ismbcalnum -@ stub _o__ismbcalnum_l +@ cdecl _o__ismbcalnum_l(long ptr) ucrtbase._o__ismbcalnum_l @ cdecl _o__ismbcalpha(long) ucrtbase._o__ismbcalpha @ stub _o__ismbcalpha_l @ stub _o__ismbcblank diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 5f38a7a3fb..acf8601def 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -975,7 +975,7 @@ @ cdecl _ismbbtrail(long) @ cdecl _ismbbtrail_l(long ptr) @ cdecl _ismbcalnum(long) -@ stub _ismbcalnum_l +@ cdecl _ismbcalnum_l(long ptr) @ cdecl _ismbcalpha(long) @ stub _ismbcalpha_l @ cdecl _ismbcdigit(long) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 9589d62c71..477b5a4a00 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1321,7 +1321,7 @@ @ cdecl _ismbbtrail(long) @ cdecl _ismbbtrail_l(long ptr) @ cdecl _ismbcalnum(long) -@ stub _ismbcalnum_l +@ cdecl _ismbcalnum_l(long ptr) @ cdecl _ismbcalpha(long) @ stub _ismbcalpha_l @ cdecl _ismbcdigit(long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 2ca13a6cdc..b3207ad086 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1324,7 +1324,7 @@ @ cdecl _ismbbtrail(long) @ cdecl _ismbbtrail_l(long ptr) @ cdecl _ismbcalnum(long) -@ stub _ismbcalnum_l +@ cdecl _ismbcalnum_l(long ptr) @ cdecl _ismbcalpha(long) @ stub _ismbcalpha_l @ stub _ismbcblank diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 17376db528..fa6c7186f7 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -647,7 +647,7 @@ @ cdecl _ismbbtrail(long) @ cdecl _ismbbtrail_l(long ptr) @ cdecl _ismbcalnum(long) -@ stub _ismbcalnum_l +@ cdecl _ismbcalnum_l(long ptr) @ cdecl _ismbcalpha(long) @ stub _ismbcalpha_l @ cdecl _ismbcdigit(long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 602f1449ac..566e9431be 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -625,7 +625,7 @@ @ cdecl _ismbbtrail(long) @ cdecl _ismbbtrail_l(long ptr) @ cdecl _ismbcalnum(long) -@ stub _ismbcalnum_l +@ cdecl _ismbcalnum_l(long ptr) @ cdecl _ismbcalpha(long) @ stub _ismbcalpha_l @ cdecl _ismbcdigit(long) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 8376fe2098..5b07e13bba 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -84,26 +84,37 @@ static const unsigned char mbctombb_932_kana[] = { 0xd2,0xd3,0xac,0xd4,0xad,0xd5,0xae,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdc,0xb2, 0xb4,0xa6,0xdd,0xb3,0xb6,0xb9};
-static MSVCRT_wchar_t msvcrt_mbc_to_wc(unsigned int ch) +static MSVCRT_wchar_t msvcrt_mbc_to_wc_l(unsigned int ch, MSVCRT__locale_t locale) { - MSVCRT_wchar_t chW; - char mbch[2]; - int n_chars; + MSVCRT_pthreadmbcinfo mbcinfo; + MSVCRT_wchar_t chW; + char mbch[2]; + int n_chars;
- if (ch <= 0xff) { - mbch[0] = ch; - n_chars = 1; - } else { - mbch[0] = (ch >> 8) & 0xff; - mbch[1] = ch & 0xff; - n_chars = 2; - } - if (!MultiByteToWideChar(get_mbcinfo()->mbcodepage, 0, mbch, n_chars, &chW, 1)) - { - WARN("MultiByteToWideChar failed on %x\n", ch); - return 0; - } - return chW; + if(locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + + if (ch <= 0xff) { + mbch[0] = ch; + n_chars = 1; + } else { + mbch[0] = (ch >> 8) & 0xff; + mbch[1] = ch & 0xff; + n_chars = 2; + } + if (!MultiByteToWideChar(mbcinfo->mbcodepage, 0, mbch, n_chars, &chW, 1)) + { + WARN("MultiByteToWideChar failed on %x\n", ch); + return 0; + } + return chW; +} + +static MSVCRT_wchar_t msvcrt_mbc_to_wc(unsigned int ch) +{ + return msvcrt_mbc_to_wc_l(ch, NULL); }
static inline MSVCRT_size_t u_strlen( const unsigned char *str ) @@ -1476,13 +1487,20 @@ int CDECL _ismbcsymbol(unsigned int ch) return ((ctype & C3_SYMBOL) != 0); }
+/********************************************************************* + * _ismbcalnum_l (MSVCRT.@) + */ +int CDECL _ismbcalnum_l(unsigned int ch, MSVCRT__locale_t locale) +{ + return MSVCRT__iswalnum_l( msvcrt_mbc_to_wc_l(ch, locale), locale ); +} + /********************************************************************* * _ismbcalnum (MSVCRT.@) */ int CDECL _ismbcalnum(unsigned int ch) { - MSVCRT_wchar_t wch = msvcrt_mbc_to_wc( ch ); - return (get_char_typeW( wch ) & (C1_ALPHA | C1_DIGIT)); + return _ismbcalnum_l( ch, NULL ); }
/********************************************************************* diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index 4a13501993..a0fbeb7ebe 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -1201,6 +1201,7 @@ int __cdecl MSVCRT_wcsncmp(const MSVCRT_wchar_t*, const MSVCRT_wchar_t*, MSVCRT_ int __cdecl MSVCRT__wcsnicmp(const MSVCRT_wchar_t*, const MSVCRT_wchar_t*, MSVCRT_size_t); int __cdecl MSVCRT_towlower(MSVCRT_wint_t); int __cdecl MSVCRT_towupper(MSVCRT_wint_t); +int __cdecl MSVCRT__iswalnum_l(MSVCRT_wchar_t, MSVCRT__locale_t);
/* Maybe one day we'll enable the invalid parameter handlers with the full set of information (msvcrXXd) * #define MSVCRT_INVALID_PMT(x) MSVCRT_call_invalid_parameter_handler(x, __FUNCTION__, __FILE__, __LINE__, 0) diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 0d0221461a..dc3048469d 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -593,7 +593,7 @@ @ cdecl _ismbbtrail(long) @ cdecl _ismbbtrail_l(long ptr) @ cdecl _ismbcalnum(long) -# stub _ismbcalnum_l(long ptr) +@ cdecl _ismbcalnum_l(long ptr) @ cdecl _ismbcalpha(long) # stub _ismbcalpha_l(long ptr) @ cdecl _ismbcdigit(long) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 5436d4cac2..b6d3a033e5 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -463,7 +463,7 @@ @ cdecl _ismbbtrail(long) @ cdecl _ismbbtrail_l(long ptr) @ cdecl _ismbcalnum(long) -@ stub _ismbcalnum_l +@ cdecl _ismbcalnum_l(long ptr) @ cdecl _ismbcalpha(long) @ stub _ismbcalpha_l @ stub _ismbcblank @@ -1062,7 +1062,7 @@ @ cdecl _o__ismbbtrail(long) _ismbbtrail @ cdecl _o__ismbbtrail_l(long ptr) _ismbbtrail_l @ cdecl _o__ismbcalnum(long) _ismbcalnum -@ stub _o__ismbcalnum_l +@ cdecl _o__ismbcalnum_l(long ptr) _ismbcalnum_l @ cdecl _o__ismbcalpha(long) _ismbcalpha @ stub _o__ismbcalpha_l @ stub _o__ismbcblank