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 d0adc1455d3..9db4f532522 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 @@ -112,7 +112,7 @@ @ cdecl _mbsinc(str) ucrtbase._mbsinc @ stub _mbsinc_l @ cdecl _mbslen(str) ucrtbase._mbslen -@ stub _mbslen_l +@ cdecl _mbslen_l(str ptr) ucrtbase._mbslen_l @ cdecl _mbslwr(str) ucrtbase._mbslwr @ stub _mbslwr_l @ cdecl _mbslwr_s(str long) ucrtbase._mbslwr_s @@ -161,8 +161,8 @@ @ stub _mbsnicoll_l @ cdecl _mbsninc(str long) ucrtbase._mbsninc @ stub _mbsninc_l -@ stub _mbsnlen -@ stub _mbsnlen_l +@ cdecl _mbsnlen(str long) ucrtbase._mbsnlen +@ cdecl _mbsnlen_l(str long ptr) ucrtbase._mbsnlen_l @ cdecl _mbsnset(ptr long long) ucrtbase._mbsnset @ stub _mbsnset_l @ stub _mbsnset_s diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 340a41acff8..5c8158aef60 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1118,7 +1118,7 @@ @ cdecl _mbsinc(str) @ stub _mbsinc_l @ cdecl _mbslen(str) -@ stub _mbslen_l +@ cdecl _mbslen_l(str ptr) @ cdecl _mbslwr(str) @ stub _mbslwr_l @ cdecl _mbslwr_s(str long) @@ -1167,8 +1167,8 @@ @ stub _mbsnicoll_l @ cdecl _mbsninc(str long) @ stub _mbsninc_l -@ stub _mbsnlen -@ stub _mbsnlen_l +@ cdecl _mbsnlen(str long) +@ cdecl _mbsnlen_l(str long ptr) @ cdecl _mbsnset(ptr long long) @ stub _mbsnset_l @ stub _mbsnset_s diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index cc90e0c1b31..2a7b777250d 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1475,7 +1475,7 @@ @ cdecl _mbsinc(str) @ stub _mbsinc_l @ cdecl _mbslen(str) -@ stub _mbslen_l +@ cdecl _mbslen_l(str ptr) @ cdecl _mbslwr(str) @ stub _mbslwr_l @ cdecl _mbslwr_s(str long) @@ -1524,8 +1524,8 @@ @ stub _mbsnicoll_l @ cdecl _mbsninc(str long) @ stub _mbsninc_l -@ stub _mbsnlen -@ stub _mbsnlen_l +@ cdecl _mbsnlen(str long) +@ cdecl _mbsnlen_l(str long ptr) @ cdecl _mbsnset(ptr long long) @ stub _mbsnset_l @ stub _mbsnset_s diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index fabe0f8e0b1..725ecb2bd69 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1485,7 +1485,7 @@ @ cdecl _mbsinc(str) @ stub _mbsinc_l @ cdecl _mbslen(str) -@ stub _mbslen_l +@ cdecl _mbslen_l(str ptr) @ cdecl _mbslwr(str) @ stub _mbslwr_l @ cdecl _mbslwr_s(str long) @@ -1534,8 +1534,8 @@ @ stub _mbsnicoll_l @ cdecl _mbsninc(str long) @ stub _mbsninc_l -@ stub _mbsnlen -@ stub _mbsnlen_l +@ cdecl _mbsnlen(str long) +@ cdecl _mbsnlen_l(str long ptr) @ cdecl _mbsnset(ptr long long) @ stub _mbsnset_l @ stub _mbsnset_s diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index d0e9be0d106..d8290dde962 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -790,7 +790,7 @@ @ cdecl _mbsinc(str) @ stub _mbsinc_l @ cdecl _mbslen(str) -@ stub _mbslen_l +@ cdecl _mbslen_l(str ptr) @ cdecl _mbslwr(str) @ stub _mbslwr_l @ cdecl _mbslwr_s(str long) @@ -839,8 +839,8 @@ @ stub _mbsnicoll_l @ cdecl _mbsninc(str long) @ stub _mbsninc_l -@ stub _mbsnlen -@ stub _mbsnlen_l +@ cdecl _mbsnlen(str long) +@ cdecl _mbsnlen_l(str long ptr) @ cdecl _mbsnset(ptr long long) @ stub _mbsnset_l @ stub _mbsnset_s diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index c3a6d2e74e9..bfaf6f6df99 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -768,7 +768,7 @@ @ cdecl _mbsinc(str) @ stub _mbsinc_l @ cdecl _mbslen(str) -@ stub _mbslen_l +@ cdecl _mbslen_l(str ptr) @ cdecl _mbslwr(str) @ stub _mbslwr_l @ cdecl _mbslwr_s(str long) @@ -817,8 +817,8 @@ @ stub _mbsnicoll_l @ cdecl _mbsninc(str long) @ stub _mbsninc_l -@ stub _mbsnlen -@ stub _mbsnlen_l +@ cdecl _mbsnlen(str long) +@ cdecl _mbsnlen_l(str long ptr) @ cdecl _mbsnset(ptr long long) @ stub _mbsnset_l @ stub _mbsnset_s diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 63be8057285..12a7f5d9f17 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -568,24 +568,59 @@ unsigned char* CDECL _mbsninc(const unsigned char* str, MSVCRT_size_t num) return (unsigned char*)str; } +/********************************************************************* + * _mbsnlen_l(MSVCRT.@) + */ +MSVCRT_size_t CDECL _mbsnlen_l(const unsigned char *str, + MSVCRT_size_t maxsize, MSVCRT__locale_t locale) +{ + MSVCRT_pthreadmbcinfo mbcinfo; + MSVCRT_size_t i = 0, len = 0; + + if(!locale) + mbcinfo = get_mbcinfo(); + else + mbcinfo = locale->mbcinfo; + + if(!mbcinfo->ismbcodepage) + return MSVCRT_strnlen((const char*)str, maxsize); + + while(i