-- v5: msvcrt: Add _ismbstrail_l implementation. msvcrt: Add _ismbslead_l implementation.
From: Bartosz Kosiorek gang65@poczta.onet.pl
--- 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 | 22 ++++++++++++++++++---- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 2 +- 8 files changed, 25 insertions(+), 11 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index b051cf6a77f..3b053698f0c 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1100,7 +1100,7 @@ @ cdecl _mbscat_s(ptr long str) @ cdecl _mbscat_s_l(ptr long str ptr) @ cdecl _mbschr(str long) -@ stub _mbschr_l +@ cdecl _mbschr_l(str long ptr) @ cdecl _mbscmp(str str) @ cdecl _mbscmp_l(str str ptr) @ cdecl _mbscoll(str str) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 593df178536..c57eca5d678 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1457,7 +1457,7 @@ @ cdecl _mbscat_s(ptr long str) @ cdecl _mbscat_s_l(ptr long str ptr) @ cdecl _mbschr(str long) -@ stub _mbschr_l +@ cdecl _mbschr_l(str long ptr) @ cdecl _mbscmp(str str) @ cdecl _mbscmp_l(str str ptr) @ cdecl _mbscoll(str str) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index cd92da9a8d7..b4503c10d2b 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1468,7 +1468,7 @@ @ cdecl _mbscat_s(ptr long str) @ cdecl _mbscat_s_l(ptr long str ptr) @ cdecl _mbschr(str long) -@ stub _mbschr_l +@ cdecl _mbschr_l(str long ptr) @ cdecl _mbscmp(str str) @ cdecl _mbscmp_l(str str ptr) @ cdecl _mbscoll(str str) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index de0da8e26e9..bf63a33ed07 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -772,7 +772,7 @@ @ cdecl _mbscat_s(ptr long str) @ cdecl _mbscat_s_l(ptr long str ptr) @ cdecl _mbschr(str long) -@ stub _mbschr_l +@ cdecl _mbschr_l(str long ptr) @ cdecl _mbscmp(str str) @ cdecl _mbscmp_l(str str ptr) @ cdecl _mbscoll(str str) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index d5f94a65f78..377cbe7684b 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -750,7 +750,7 @@ @ cdecl _mbscat_s(ptr long str) @ cdecl _mbscat_s_l(ptr long str ptr) @ cdecl _mbschr(str long) -@ stub _mbschr_l +@ cdecl _mbschr_l(str long ptr) @ cdecl _mbscmp(str str) @ cdecl _mbscmp_l(str str ptr) @ cdecl _mbscoll(str str) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 41a46f40495..9e8b0aaf198 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -1344,18 +1344,21 @@ unsigned char * CDECL _mbsstr(const unsigned char *haystack, const unsigned char }
/********************************************************************* - * _mbschr(MSVCRT.@) + * _mbschr_l(MSVCRT.@) * - * Find a multibyte character in a multibyte string. + * Find a multibyte character in a multibyte string, + * by using the specified locale */ -unsigned char* CDECL _mbschr(const unsigned char* s, unsigned int x) +unsigned char* CDECL _mbschr_l(const unsigned char* s, unsigned int x, _locale_t locale) { + if (!MSVCRT_CHECK_PMT(s)) + return NULL; if(get_mbcinfo()->ismbcodepage) { unsigned int c; while (1) { - c = _mbsnextc(s); + c = _mbsnextc_l(s, locale); if (c == x) return (unsigned char*)s; if (!c) @@ -1366,6 +1369,17 @@ unsigned char* CDECL _mbschr(const unsigned char* s, unsigned int x) return u_strchr(s, x); /* ASCII CP */ }
+/********************************************************************* + * _mbschr(MSVCRT.@) + * + * Find a multibyte character in a multibyte string, + * by using the current locale + */ +unsigned char* CDECL _mbschr(const unsigned char* s, unsigned int x) +{ + return _mbschr_l(s, x, NULL); +} + /********************************************************************* * _mbsrchr(MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index dab9ae87b5b..4c9363ddbf8 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -718,7 +718,7 @@ @ cdecl _mbscat_s(ptr long str) @ cdecl _mbscat_s_l(ptr long str ptr) @ cdecl _mbschr(str long) -# stub _mbschr_l(str long ptr) +@ cdecl _mbschr_l(str long ptr) @ cdecl _mbscmp(str str) @ cdecl _mbscmp_l(str str ptr) @ cdecl _mbscoll(str str) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 3e3fd8d6965..b889fd627c4 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -614,7 +614,7 @@ @ cdecl _mbscat_s(ptr long str) @ cdecl _mbscat_s_l(ptr long str ptr) @ cdecl _mbschr(str long) -@ stub _mbschr_l +@ cdecl _mbschr_l(str long ptr) @ cdecl _mbscmp(str str) @ cdecl _mbscmp_l(str str ptr) @ cdecl _mbscoll(str str)
From: Bartosz Kosiorek gang65@poczta.onet.pl
--- 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 | 10 +++++++++- dlls/ucrtbase/ucrtbase.spec | 2 +- 7 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 6b0865b5ad7..d4fa4e38b7b 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1082,7 +1082,7 @@ @ cdecl _mbcjmstojis(long) @ stub _mbcjmstojis_l @ cdecl _mbclen(ptr) -@ stub _mbclen_l +@ cdecl _mbclen_l(ptr ptr) @ cdecl _mbctohira(long) @ stub _mbctohira_l @ cdecl _mbctokata(long) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 35256da6664..a27a4487608 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1439,7 +1439,7 @@ @ cdecl _mbcjmstojis(long) @ stub _mbcjmstojis_l @ cdecl _mbclen(ptr) -@ stub _mbclen_l +@ cdecl _mbclen_l(ptr ptr) @ cdecl _mbctohira(long) @ stub _mbctohira_l @ cdecl _mbctokata(long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index bf924f8d2b0..cb673976e61 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1450,7 +1450,7 @@ @ cdecl _mbcjmstojis(long) @ stub _mbcjmstojis_l @ cdecl _mbclen(ptr) -@ stub _mbclen_l +@ cdecl _mbclen_l(ptr ptr) @ cdecl _mbctohira(long) @ stub _mbctohira_l @ cdecl _mbctokata(long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index d1d2f8e32f0..ca32dac7285 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -754,7 +754,7 @@ @ cdecl _mbcjmstojis(long) @ stub _mbcjmstojis_l @ cdecl _mbclen(ptr) -@ stub _mbclen_l +@ cdecl _mbclen_l(ptr ptr) @ cdecl _mbctohira(long) @ stub _mbctohira_l @ cdecl _mbctokata(long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index ef5124a66c9..ce0ddfb6168 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -732,7 +732,7 @@ @ cdecl _mbcjmstojis(long) @ stub _mbcjmstojis_l @ cdecl _mbclen(ptr) -@ stub _mbclen_l +@ cdecl _mbclen_l(ptr ptr) @ cdecl _mbctohira(long) @ stub _mbctohira_l @ cdecl _mbctokata(long) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 1986bdcbff2..20a81e83667 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -643,12 +643,20 @@ unsigned char* CDECL _mbsdec(const unsigned char* start, const unsigned char* cu return (unsigned char *)cur - 1; /* ASCII CP or SB char */ }
+/********************************************************************* + * _mbclen_l(MSVCRT.@) + */ +size_t CDECL _mbclen_l(const unsigned char* str, _locale_t locale) +{ + return _ismbblead_l(*str, locale) ? 2 : 1; +} + /********************************************************************* * _mbclen(MSVCRT.@) */ size_t CDECL _mbclen(const unsigned char* str) { - return _ismbblead(*str) ? 2 : 1; + return _mbclen_l(str, NULL); }
/********************************************************************* diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index b41b5c6c973..78e4caf1479 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -597,7 +597,7 @@ @ cdecl _mbcjmstojis(long) @ stub _mbcjmstojis_l @ cdecl _mbclen(ptr) -@ stub _mbclen_l +@ cdecl _mbclen_l(ptr ptr) @ cdecl _mbctohira(long) @ stub _mbctohira_l @ cdecl _mbctokata(long)
From: Bartosz Kosiorek gang65@poczta.onet.pl
--- 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 | 27 ++++++++++++++++++++++----- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 2 +- 8 files changed, 29 insertions(+), 12 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 3b053698f0c..6b0865b5ad7 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1112,7 +1112,7 @@ @ cdecl _mbsdec(ptr ptr) @ stub _mbsdec_l @ cdecl _mbsicmp(str str) -@ stub _mbsicmp_l +@ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) @ cdecl _mbsicoll_l(str str ptr) @ cdecl _mbsinc(str) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index c57eca5d678..35256da6664 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1469,7 +1469,7 @@ @ cdecl _mbsdec(ptr ptr) @ stub _mbsdec_l @ cdecl _mbsicmp(str str) -@ stub _mbsicmp_l +@ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) @ cdecl _mbsicoll_l(str str ptr) @ cdecl _mbsinc(str) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index b4503c10d2b..bf924f8d2b0 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1480,7 +1480,7 @@ @ cdecl _mbsdec(ptr ptr) @ stub _mbsdec_l @ cdecl _mbsicmp(str str) -@ stub _mbsicmp_l +@ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) @ cdecl _mbsicoll_l(str str ptr) @ cdecl _mbsinc(str) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index bf63a33ed07..d1d2f8e32f0 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -784,7 +784,7 @@ @ cdecl _mbsdec(ptr ptr) @ stub _mbsdec_l @ cdecl _mbsicmp(str str) -@ stub _mbsicmp_l +@ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) @ cdecl _mbsicoll_l(str str ptr) @ cdecl _mbsinc(str) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 377cbe7684b..ef5124a66c9 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -762,7 +762,7 @@ @ cdecl _mbsdec(ptr ptr) @ stub _mbsdec_l @ cdecl _mbsicmp(str str) -@ stub _mbsicmp_l +@ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) @ cdecl _mbsicoll_l(str str ptr) @ cdecl _mbsinc(str) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 9e8b0aaf198..1986bdcbff2 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -1098,11 +1098,20 @@ int CDECL _mbscoll(const unsigned char* str, const unsigned char* cmp) }
/********************************************************************* - * _mbsicmp(MSVCRT.@) + * _mbsicmp_l(MSVCRT.@) */ -int CDECL _mbsicmp(const unsigned char* str, const unsigned char* cmp) +int CDECL _mbsicmp_l(const unsigned char* str, const unsigned char* cmp, _locale_t locale) { - if(get_mbcinfo()->ismbcodepage) + pthreadmbcinfo mbcinfo; + + if (!MSVCRT_CHECK_PMT(str && cmp)) + return _NLSCMPERROR; + + if(!locale) + mbcinfo = get_mbcinfo(); + else + mbcinfo = locale->mbcinfo; + if(mbcinfo) { unsigned int strc, cmpc; do { @@ -1110,8 +1119,8 @@ int CDECL _mbsicmp(const unsigned char* str, const unsigned char* cmp) return *cmp ? -1 : 0; if(!*cmp) return 1; - strc = _mbctolower(_mbsnextc(str)); - cmpc = _mbctolower(_mbsnextc(cmp)); + strc = _mbctolower_l(_mbsnextc_l(str, locale), locale); + cmpc = _mbctolower_l(_mbsnextc_l(cmp, locale), locale); if(strc != cmpc) return strc < cmpc ? -1 : 1; str +=(strc > 255) ? 2 : 1; @@ -1121,6 +1130,14 @@ int CDECL _mbsicmp(const unsigned char* str, const unsigned char* cmp) return u_strcasecmp(str, cmp); /* ASCII CP */ }
+/********************************************************************* + * _mbsicmp(MSVCRT.@) + */ +int CDECL _mbsicmp(const unsigned char* str, const unsigned char* cmp) +{ + return _mbsicmp_l(str, cmp, NULL); +} + /********************************************************************* * _mbsncmp(MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 4c9363ddbf8..5e412c422a4 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -733,7 +733,7 @@ @ cdecl _mbsdup(str) _strdup # stub _strdup_dbg(str long str long) @ cdecl _mbsicmp(str str) -# stub _mbsicmp_l(str str ptr) +@ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) @ cdecl _mbsicoll_l(str str ptr) @ cdecl _mbsinc(str) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index b889fd627c4..b41b5c6c973 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -627,7 +627,7 @@ @ stub _mbsdec_l @ cdecl _mbsdup(str) _strdup @ cdecl _mbsicmp(str str) -@ stub _mbsicmp_l +@ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) @ cdecl _mbsicoll_l(str str ptr) @ cdecl _mbsinc(str)
From: Bartosz Kosiorek gang65@poczta.onet.pl
--- dlls/msvcrt/mbcs.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 20a81e83667..f9973baa982 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -982,7 +982,8 @@ int CDECL _mbscmp_l(const unsigned char* str, const unsigned char* cmp, _locale_ { pthreadmbcinfo mbcinfo;
- if (!str || !cmp) return INT_MAX; + if (!MSVCRT_CHECK_PMT(str && cmp)) + return _NLSCMPERROR;
mbcinfo = locale ? locale->mbcinfo : get_mbcinfo();
From: Bartosz Kosiorek gang65@poczta.onet.pl
--- dlls/msvcr100/msvcr100.spec | 4 ++-- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/mbcs.c | 26 ++++++++++++++++++++++---- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 31 insertions(+), 13 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index d4fa4e38b7b..54f988ee9cd 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1007,9 +1007,9 @@ @ cdecl _ismbcupper(long) @ cdecl _ismbcupper_l(long ptr) @ cdecl _ismbslead(ptr ptr) -@ stub _ismbslead_l +@ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) -@ stub _ismbstrail_l +@ cdecl _ismbstrail_l(ptr ptr ptr) @ cdecl _isnan(double) @ cdecl -arch=x86_64 _isnanf(float) @ cdecl _isprint_l(long ptr) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index a27a4487608..160dce837d9 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1353,7 +1353,7 @@ @ cdecl _ismbcupper(long) @ cdecl _ismbcupper_l(long ptr) @ cdecl _ismbslead(ptr ptr) -@ stub _ismbslead_l +@ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) @ stub _ismbstrail_l @ cdecl _isnan(double) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index cb673976e61..268c6db59d7 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1359,7 +1359,7 @@ @ cdecl _ismbcupper(long) @ cdecl _ismbcupper_l(long ptr) @ cdecl _ismbslead(ptr ptr) -@ stub _ismbslead_l +@ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) @ stub _ismbstrail_l @ cdecl _isnan(double) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index ca32dac7285..cafb0a8f644 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -679,7 +679,7 @@ @ cdecl _ismbcupper(long) @ cdecl _ismbcupper_l(long ptr) @ cdecl _ismbslead(ptr ptr) -@ stub _ismbslead_l +@ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) @ stub _ismbstrail_l @ cdecl _isnan(double) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index ce0ddfb6168..2773762b176 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -657,7 +657,7 @@ @ cdecl _ismbcupper(long) @ cdecl _ismbcupper_l(long ptr) @ cdecl _ismbslead(ptr ptr) -@ stub _ismbslead_l +@ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) @ stub _ismbstrail_l @ cdecl _isnan(double) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index f9973baa982..00f19e97b9c 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -1807,13 +1807,23 @@ int CDECL _ismbclegal(unsigned int c) }
/********************************************************************* - * _ismbslead(MSVCRT.@) + * _ismbslead_l(MSVCRT.@) */ -int CDECL _ismbslead(const unsigned char* start, const unsigned char* str) +int CDECL _ismbslead_l(const unsigned char* start, const unsigned char* str, _locale_t locale) { + pthreadmbcinfo mbcinfo; + + if (!MSVCRT_CHECK_PMT(start && str)) + return 0; + + if(locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + int lead = 0;
- if(!get_mbcinfo()->ismbcodepage) + if(!mbcinfo->ismbcodepage) return 0;
/* Lead bytes can also be trail bytes so we need to analyse the string @@ -1822,13 +1832,21 @@ int CDECL _ismbslead(const unsigned char* start, const unsigned char* str) { if (!*start) return 0; - lead = !lead && _ismbblead(*start); + lead = !lead && _ismbblead_l(*start, locale); start++; }
return lead ? -1 : 0; }
+/********************************************************************* + * _ismbslead(MSVCRT.@) + */ +int CDECL _ismbslead(const unsigned char* start, const unsigned char* str) +{ + return _ismbslead_l(start, str, NULL); +} + /********************************************************************* * _ismbstrail(MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 5e412c422a4..40ae2b71138 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -628,7 +628,7 @@ @ cdecl _ismbcupper(long) @ cdecl _ismbcupper_l(long ptr) @ cdecl _ismbslead(ptr ptr) -# stub _ismbslead_l(long ptr) +@ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) # stub _ismbstrail_l(long ptr) @ cdecl _isnan(double) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 78e4caf1479..b557cf45bb4 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -499,7 +499,7 @@ @ cdecl _ismbcupper(long) @ cdecl _ismbcupper_l(long ptr) @ cdecl _ismbslead(ptr ptr) -@ stub _ismbslead_l +@ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) @ stub _ismbstrail_l @ cdecl _isnan(double) @@ -1098,7 +1098,7 @@ @ cdecl _o__ismbcupper(long) _ismbcupper @ cdecl _o__ismbcupper_l(long ptr) _ismbcupper_l @ cdecl _o__ismbslead(ptr ptr) _ismbslead -@ stub _o__ismbslead_l +@ cdecl _o__ismbslead_l(ptr ptr) _ismbslead_l @ cdecl _o__ismbstrail(ptr ptr) _ismbstrail @ stub _o__ismbstrail_l @ cdecl _o__iswctype_l(long long ptr) _iswctype_l
From: Bartosz Kosiorek gang65@poczta.onet.pl
--- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/mbcs.c | 17 ++++++++++++++--- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 2 +- 7 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 160dce837d9..d84a88ea50b 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1355,7 +1355,7 @@ @ cdecl _ismbslead(ptr ptr) @ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) -@ stub _ismbstrail_l +@ cdecl _ismbstrail_l(ptr ptr ptr) @ cdecl _isnan(double) @ cdecl -arch=x86_64 _isnanf(float) @ cdecl _isprint_l(long ptr) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 268c6db59d7..5c65b082309 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1361,7 +1361,7 @@ @ cdecl _ismbslead(ptr ptr) @ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) -@ stub _ismbstrail_l +@ cdecl _ismbstrail_l(ptr ptr ptr) @ cdecl _isnan(double) @ cdecl -arch=x86_64 _isnanf(float) @ cdecl _isprint_l(long ptr) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index cafb0a8f644..4f3425acc35 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -681,7 +681,7 @@ @ cdecl _ismbslead(ptr ptr) @ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) -@ stub _ismbstrail_l +@ cdecl _ismbstrail_l(ptr ptr ptr) @ cdecl _isnan(double) @ cdecl -arch=x86_64 _isnanf(float) @ cdecl _isprint_l(long ptr) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 2773762b176..4e26468b489 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -659,7 +659,7 @@ @ cdecl _ismbslead(ptr ptr) @ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) -@ stub _ismbstrail_l +@ cdecl _ismbstrail_l(ptr ptr ptr) @ cdecl _isnan(double) @ cdecl -arch=x86_64 _isnanf(float) @ cdecl _isprint_l(long ptr) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 00f19e97b9c..046a75d8ebb 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -1848,17 +1848,28 @@ int CDECL _ismbslead(const unsigned char* start, const unsigned char* str) }
/********************************************************************* - * _ismbstrail(MSVCRT.@) + * _ismbstrail_l(MSVCRT.@) */ -int CDECL _ismbstrail(const unsigned char* start, const unsigned char* str) +int CDECL _ismbstrail_l(const unsigned char* start, const unsigned char* str, _locale_t locale) { + if (!MSVCRT_CHECK_PMT(start && str)) + return 0; + /* Note: this function doesn't check _ismbbtrail */ - if ((str > start) && _ismbslead(start, str-1)) + if ((str > start) && _ismbslead_l(start, str-1, locale)) return -1; else return 0; }
+/********************************************************************* + * _ismbstrail(MSVCRT.@) + */ +int CDECL _ismbstrail(const unsigned char* start, const unsigned char* str) +{ + return _ismbstrail_l(start, str, NULL); +} + /********************************************************************* * _mbbtype_l(MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 40ae2b71138..295af94934c 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -630,7 +630,7 @@ @ cdecl _ismbslead(ptr ptr) @ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) -# stub _ismbstrail_l(long ptr) +@ cdecl _ismbstrail_l(ptr ptr ptr) @ cdecl _isnan(double) @ cdecl -arch=x86_64 _isnanf(float) @ cdecl _isprint_l(long ptr) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index b557cf45bb4..66ced1a62b2 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -501,7 +501,7 @@ @ cdecl _ismbslead(ptr ptr) @ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) -@ stub _ismbstrail_l +@ cdecl _ismbstrail_l(ptr ptr ptr) @ cdecl _isnan(double) @ cdecl -arch=x86_64 _isnanf(float) @ cdecl _isprint_l(long ptr)
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=125216
Your paranoid android.
=== debian11 (32 bit report) ===
wmvcore: wmvcore.c:1620: Test failed: Stream 0: Format 4: Got hr 0x8007000e. Unhandled exception: page fault on read access to 0x00000000 in 32-bit code (0x00410cbd).
=== debian11 (build log) ===
Use of uninitialized value $Flaky in addition (+) at /home/testbot/lib/WineTestBot/LogUtils.pm line 720, <$LogFile> line 25014. Use of uninitialized value $Flaky in addition (+) at /home/testbot/lib/WineTestBot/LogUtils.pm line 720, <$LogFile> line 25014. Use of uninitialized value $Flaky in addition (+) at /home/testbot/lib/WineTestBot/LogUtils.pm line 720, <$LogFile> line 25014.
On Thu Oct 20 14:52:03 2022 +0000, eric pouech wrote:
compilation fails because is your patch #5 ismbstrail implementation requires ismbslead_l which is only implemented in patch #6 maybe inverting #5 and #6 would help
true, thanks