-- v20: msvcrt: Add _ismbstrail_l implementation. msvcrt: Add _ismbslead_l implementation. msvcrt: Fix error handling for _mbscmp_l. msvcrt: Add _mbclen_l implementation. msvcrt: Add _mbsicmp_l implementation. msvcrt: Add _mbschr_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 | 27 +++++++++++++++++++++------ dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 29 insertions(+), 14 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..e5e80a26de1 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -1344,18 +1344,25 @@ unsigned char * CDECL _mbsstr(const unsigned char *haystack, const unsigned char }
/********************************************************************* - * _mbschr(MSVCRT.@) - * - * Find a multibyte character in a multibyte string. + * _mbschr_l(MSVCRT.@) */ -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(get_mbcinfo()->ismbcodepage) + pthreadmbcinfo mbcinfo; + + if(!MSVCRT_CHECK_PMT(s)) + return NULL; + + if(locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + if(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 +1373,14 @@ unsigned char* CDECL _mbschr(const unsigned char* s, unsigned int x) return u_strchr(s, x); /* ASCII CP */ }
+/********************************************************************* + * _mbschr(MSVCRT.@) + */ +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..b84229efb1b 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) @@ -1184,7 +1184,7 @@ @ cdecl _o__mbscat_s(ptr long str) _mbscat_s @ cdecl _o__mbscat_s_l(ptr long str ptr) _mbscat_s_l @ cdecl _o__mbschr(str long) _mbschr -@ stub _o__mbschr_l +@ cdecl _o__mbschr_l(str long ptr) _mbschr_l @ cdecl _o__mbscmp(str str) _mbscmp @ cdecl _o__mbscmp_l(str str ptr) _mbscmp_l @ cdecl _o__mbscoll(str str) _mbscoll
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 | 4 ++-- 8 files changed, 30 insertions(+), 13 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 e5e80a26de1..5902bb313da 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->ismbcodepage) { 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 b84229efb1b..46f943b940e 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) @@ -1196,7 +1196,7 @@ @ cdecl _o__mbsdec(ptr ptr) _mbsdec @ stub _o__mbsdec_l @ cdecl _o__mbsicmp(str str) _mbsicmp -@ stub _o__mbsicmp_l +@ cdecl _o__mbsicmp_l(str str ptr) _mbsicmp_l @ cdecl _o__mbsicoll(str str) _mbsicoll @ cdecl _o__mbsicoll_l(str str ptr) _mbsicoll_l @ cdecl _o__mbsinc(str) _mbsinc
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/msvcrt/msvcrt.spec | 2 +- dlls/msvcrt/tests/string.c | 1 + dlls/ucrtbase/ucrtbase.spec | 4 ++-- 9 files changed, 18 insertions(+), 9 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 5902bb313da..49109943665 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) && str[1] ? 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/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 5e412c422a4..430835f4422 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -699,7 +699,7 @@ @ cdecl _mbcjmstojis(long) # stub _mbcjmstojis_l(long ptr) @ cdecl _mbclen(ptr) -# stub _mbclen_l(ptr ptr) +@ cdecl _mbclen_l(ptr ptr) @ cdecl _mbctohira(long) # stub _mbctohira_l(long ptr) @ cdecl _mbctokata(long) diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c index df3f5fceef8..6a9dc23d4f0 100644 --- a/dlls/msvcrt/tests/string.c +++ b/dlls/msvcrt/tests/string.c @@ -366,6 +366,7 @@ static void test_mbcp(void) expect_eq(_mbclen(mbstring), 2, int, "%d"); expect_eq(_mbclen(&mbstring[2]), 2, int, "%d"); expect_eq(_mbclen(&mbstring[3]), 1, int, "%d"); + expect_eq(_mbclen(mbsonlylead), 1, int, "%d"); expect_eq(_mbslen(mbstring2), 4, int, "%d"); expect_eq(_mbslen(mbsonlylead), 0, int, "%d"); /* lead + NUL not counted as character */ expect_eq(_mbslen(mbstring), 4, int, "%d"); /* lead + invalid trail counted */ diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 46f943b940e..969487c2b1e 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) @@ -1167,7 +1167,7 @@ @ cdecl _o__mbcjmstojis(long) _mbcjmstojis @ stub _o__mbcjmstojis_l @ cdecl _o__mbclen(ptr) _mbclen -@ stub _o__mbclen_l +@ cdecl _o__mbclen_l(ptr ptr) _mbclen_l @ cdecl _o__mbctohira(long) _mbctohira @ stub _o__mbctohira_l @ cdecl _o__mbctokata(long) _mbctokata
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 49109943665..1754a732cb6 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 | 25 +++++++++++++++++++++---- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 30 insertions(+), 13 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index d4fa4e38b7b..8f24047e8b5 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 +@ stub _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 1754a732cb6..0e6e0bdcc7f 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -1808,13 +1808,22 @@ 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; int lead = 0;
- if(!get_mbcinfo()->ismbcodepage) + if (!MSVCRT_CHECK_PMT(start && str)) + return 0; + + if(locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + + if(!mbcinfo->ismbcodepage) return 0;
/* Lead bytes can also be trail bytes so we need to analyse the string @@ -1823,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 430835f4422..ae70c2619b6 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 969487c2b1e..4d0e69fc57b 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 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/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 | 17 ++++++++++++++--- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 8f24047e8b5..54f988ee9cd 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1009,7 +1009,7 @@ @ cdecl _ismbslead(ptr ptr) @ cdecl _ismbslead_l(ptr ptr ptr) @ cdecl _ismbstrail(ptr ptr) -@ stub _ismbstrail_l(ptr ptr 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/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 0e6e0bdcc7f..bdcfea3b01a 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 ae70c2619b6..156216ae715 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 4d0e69fc57b..805ccc908f7 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) @@ -1100,7 +1100,7 @@ @ cdecl _o__ismbslead(ptr ptr) _ismbslead @ cdecl _o__ismbslead_l(ptr ptr ptr) _ismbslead_l @ cdecl _o__ismbstrail(ptr ptr) _ismbstrail -@ stub _o__ismbstrail_l +@ cdecl _o__ismbstrail_l(ptr ptr ptr) _ismbstrail_l @ cdecl _o__iswctype_l(long long ptr) _iswctype_l @ cdecl _o__itoa(long ptr long) _itoa @ cdecl _o__itoa_s(long ptr long long) _itoa_s
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 full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=125336
Your paranoid android.
=== debian11 (build log) ===
Task: Could not create the win32 wineprefix: Failed to disable the crash dialogs: Task: WineTest did not produce the win32 report
This merge request was approved by Piotr Caban.