Piotr Caban : msvcrt: Add _ismbcalnum_l implementation.
Alexandre Julliard
julliard at winehq.org
Thu Jul 16 19:01:22 CDT 2020
Module: wine
Branch: master
Commit: 19c05e60a3cbb7dfa040b919e8783d571fc6ae01
URL: https://source.winehq.org/git/wine.git/?a=commit;h=19c05e60a3cbb7dfa040b919e8783d571fc6ae01
Author: Piotr Caban <piotr at codeweavers.com>
Date: Thu Jul 16 15:32:53 2020 +0200
msvcrt: Add _ismbcalnum_l implementation.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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
More information about the wine-cvs
mailing list