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