diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 307d00e11e5..f4baf442b53 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1094,7 +1094,7 @@ @ cdecl _mbctoupper(long) @ cdecl _mbctoupper_l(long ptr) @ extern _mbctype MSVCRT_mbctype -@ stub _mblen_l +@ cdecl _mblen_l(str long ptr) @ cdecl _mbsbtype(str long) @ cdecl _mbsbtype_l(str long ptr) @ cdecl _mbscat_s(ptr long str) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index baf10ae48a4..e9bdf422024 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1451,7 +1451,7 @@ @ cdecl _mbctoupper(long) @ cdecl _mbctoupper_l(long ptr) @ extern _mbctype MSVCRT_mbctype -@ stub _mblen_l +@ cdecl _mblen_l(str long ptr) @ cdecl _mbsbtype(str long) @ cdecl _mbsbtype_l(str long ptr) @ cdecl _mbscat_s(ptr long str) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 8fa160170d5..13dacc15744 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1462,7 +1462,7 @@ @ cdecl _mbctoupper(long) @ cdecl _mbctoupper_l(long ptr) @ extern _mbctype MSVCRT_mbctype -@ stub _mblen_l +@ cdecl _mblen_l(str long ptr) @ cdecl _mbsbtype(str long) @ cdecl _mbsbtype_l(str long ptr) @ cdecl _mbscat_s(ptr long str) diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index 2b2949cdc66..561c3774260 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -1302,7 +1302,7 @@ @ cdecl _malloc_crt(long) msvcr120._malloc_crt # extern _mbcasemap @ extern _mbctype msvcr120._mbctype -@ stub _mblen_l +@ cdecl _mblen_l(str long ptr) msvcr120._mblen_l @ cdecl _mbstowcs_l(ptr str long ptr) msvcr120._mbstowcs_l @ cdecl _mbstowcs_s_l(ptr ptr long str long ptr) msvcr120._mbstowcs_s_l @ cdecl _mbstrlen(str) msvcr120._mbstrlen diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 9f92ba36a9f..91781c9c9e4 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -766,7 +766,7 @@ @ cdecl _mbctoupper(long) @ cdecl _mbctoupper_l(long ptr) @ extern _mbctype MSVCRT_mbctype -@ stub _mblen_l +@ cdecl _mblen_l(str long ptr) @ cdecl _mbsbtype(str long) @ cdecl _mbsbtype_l(str long ptr) @ cdecl _mbscat_s(ptr long str) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 8d647d6e907..2af41f8aea2 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -744,7 +744,7 @@ @ cdecl _mbctoupper(long) @ cdecl _mbctoupper_l(long ptr) @ extern _mbctype MSVCRT_mbctype -@ stub _mblen_l +@ cdecl _mblen_l(str long ptr) @ cdecl _mbsbtype(str long) @ cdecl _mbsbtype_l(str long ptr) @ cdecl _mbscat_s(ptr long str) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index cc006765662..9b52170d4e9 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2984,21 +2984,34 @@ unsigned char* CDECL _mbspbrk(const unsigned char *str, const unsigned char *acc */ /********************************************************************* - * mblen(MSVCRT.@) + * _mblen_l(MSVCRT.@) * REMARKS * Unlike most of the multibyte string functions this function uses * the locale codepage, not the codepage set by _setmbcp */ +int CDECL _mblen_l(const char* str, size_t size, _locale_t locale) +{ + pthreadlocinfo locinfo; + + if (!str || !*str || !size) + return 0; + + if (locale) + locinfo = locale->locinfo; + else + locinfo = get_locinfo(); + + if (locinfo->mb_cur_max == 1) + return 1; /* ASCII CP */ + return !_isleadbyte_l((unsigned char)*str, locale) ? 1 : (size > 1 ? 2 : -1); +} + +/********************************************************************* + * mblen(MSVCRT.@) + */ int CDECL mblen(const char* str, size_t size) { - if (str && *str && size) - { - if(get_locinfo()->mb_cur_max == 1) - return 1; /* ASCII CP */ - - return !isleadbyte((unsigned char)*str) ? 1 : (size>1 ? 2 : -1); - } - return 0; + return _mblen_l(str, size, NULL); } /********************************************************************* diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 11b65d869dc..f54a437692f 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -711,7 +711,7 @@ @ cdecl _mbctoupper(long) @ cdecl _mbctoupper_l(long ptr) @ extern _mbctype MSVCRT_mbctype -# stub _mblen_l(str long ptr) +@ cdecl _mblen_l(str long ptr) @ cdecl _mbsbtype(str long) @ cdecl _mbsbtype_l(str long ptr) @ cdecl _mbscat(str str) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 4bb7f4148c7..7cf9b01aa4f 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -609,7 +609,7 @@ @ cdecl _mbctombb_l(long ptr) @ cdecl _mbctoupper(long) @ cdecl _mbctoupper_l(long ptr) -@ stub _mblen_l +@ cdecl _mblen_l(str long ptr) @ cdecl _mbsbtype(str long) @ cdecl _mbsbtype_l(str long ptr) @ cdecl _mbscat_s(ptr long str) @@ -1179,7 +1179,7 @@ @ cdecl _o__mbctombb_l(long ptr) _mbctombb_l @ cdecl _o__mbctoupper(long) _mbctoupper @ cdecl _o__mbctoupper_l(long ptr) _mbctoupper_l -@ stub _o__mblen_l +@ cdecl _o__mblen_l(str long ptr) _mblen_l @ cdecl _o__mbsbtype(str long) _mbsbtype @ cdecl _o__mbsbtype_l(str long ptr) _mbsbtype_l @ cdecl _o__mbscat_s(ptr long str) _mbscat_s