From: Bartosz Kosiorek gang65@poczta.onet.pl
--- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/mbcs.c | 61 +++++++++++++++++++++++++------------ dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 +-- 7 files changed, 48 insertions(+), 27 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index ec6afbd2b79..cd18dc50306 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1150,7 +1150,7 @@ @ stub _mbsncat_s @ stub _mbsncat_s_l @ cdecl _mbsnccnt(str long) -@ stub _mbsnccnt_l +@ cdecl _mbsnccnt_l(str long ptr) @ cdecl _mbsncmp(str str long)_mbsncat @ stub _mbsncmp_l @ stub _mbsncoll(str str long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index cd76f568557..19814e9dc6b 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1518,7 +1518,7 @@ @ stub _mbsncat_s @ stub _mbsncat_s_l @ cdecl _mbsnccnt(str long) -@ stub _mbsnccnt_l +@ cdecl _mbsnccnt_l(str long ptr) @ cdecl _mbsncmp(str str long) @ stub _mbsncmp_l @ stub _mbsncoll(str str long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 5bc963edf57..be691c2a4e9 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -822,7 +822,7 @@ @ stub _mbsncat_s @ stub _mbsncat_s_l @ cdecl _mbsnccnt(str long) -@ stub _mbsnccnt_l +@ cdecl _mbsnccnt_l(str long ptr) @ cdecl _mbsncmp(str str long) @ stub _mbsncmp_l @ stub _mbsncoll(str str long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index a7f47e568c7..ba0ff67b362 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -800,7 +800,7 @@ @ stub _mbsncat_s @ stub _mbsncat_s_l @ cdecl _mbsnccnt(str long) -@ stub _mbsnccnt_l +@ cdecl _mbsnccnt_l(str long ptr) @ cdecl _mbsncmp(str str long) @ stub _mbsncmp_l @ stub _mbsncoll(str str long) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index d6aea99559f..dab152396c6 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2273,31 +2273,52 @@ unsigned char* CDECL _mbsnset(unsigned char* str, unsigned int c, size_t len) }
/********************************************************************* - * _mbsnccnt(MSVCRT.@) + * _mbsnccnt_l(MSVCRT.@) * 'c' is for 'character'. */ -size_t CDECL _mbsnccnt(const unsigned char* str, size_t len) +size_t CDECL _mbsnccnt_l(const unsigned char* str, size_t len, _locale_t locale) { - size_t ret; - if(get_mbcinfo()->ismbcodepage) - { - ret=0; - while(*str && len-- > 0) + size_t ret; + pthreadmbcinfo mbcinfo; + + if (!len) + return 0; + if (!MSVCRT_CHECK_PMT(str)) + return 0; + + if (locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + + if (mbcinfo->ismbcodepage) { - if(_ismbblead(*str)) - { - if (!len) - break; - len--; - str++; - } - str++; - ret++; + ret = 0; + while (*str && len-- > 0) + { + if (_ismbblead_l(*str, locale)) + { + if (!len) + break; + len--; + str++; + } + str++; + ret++; + } + return ret; } - return ret; - } - ret=u_strlen(str); - return min(ret, len); /* ASCII CP */ + ret = u_strlen(str); + return min(ret, len); /* ASCII CP */ +} + +/********************************************************************* + * _mbsnccnt(MSVCRT.@) + * 'c' is for 'character'. + */ +size_t CDECL _mbsnccnt(const unsigned char* str, size_t len) +{ + return _mbsnccnt_l(str, len, NULL); }
/********************************************************************* diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index ff6f14b884f..f316e4f3885 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -771,7 +771,7 @@ # stub _mbsncat_s(str long str long) # stub _mbsncat_s_l(str long str long ptr) @ cdecl _mbsnccnt(str long) -# stub _mbsnccnt_l(str long ptr) +@ cdecl _mbsnccnt_l(str long ptr) @ cdecl _mbsncmp(str str long) # stub _mbsncmp_l(str str long ptr) @ stub _mbsncoll(str str long) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 91c54e1a31c..45a92bdf94f 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -666,7 +666,7 @@ @ stub _mbsncat_s @ stub _mbsncat_s_l @ cdecl _mbsnccnt(str long) -@ stub _mbsnccnt_l +@ cdecl _mbsnccnt_l(str long ptr) @ cdecl _mbsncmp(str str long) @ stub _mbsncmp_l @ stub _mbsncoll(str str long) @@ -1235,7 +1235,7 @@ @ stub _o__mbsncat_s @ stub _o__mbsncat_s_l @ cdecl _o__mbsnccnt(str long) _mbsnccnt -@ stub _o__mbsnccnt_l +@ cdecl _o__mbsnccnt_l(str long ptr) _mbsnccnt_l @ cdecl _o__mbsncmp(str str long) _mbsncmp @ stub _o__mbsncmp_l @ stub _o__mbsncoll