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 | 25 ++++++++++++++++++++----- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 28 insertions(+), 13 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 36452977926..0f57555e454 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1126,7 +1126,7 @@ @ cdecl _mbsnbcat(str str long) @ cdecl _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) -@ stub _mbsnbcat_s_l +@ cdecl _mbsnbcat_s_l(str long ptr long ptr) @ cdecl _mbsnbcmp(str str long) @ cdecl _mbsnbcmp_l(str str long ptr) @ cdecl _mbsnbcnt(ptr long) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index b057d5b85ad..072cef0f0c9 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1483,7 +1483,7 @@ @ cdecl _mbsnbcat(str str long) @ cdecl _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) -@ stub _mbsnbcat_s_l +@ cdecl _mbsnbcat_s_l(str long ptr long ptr) @ cdecl _mbsnbcmp(str str long) @ cdecl _mbsnbcmp_l(str str long ptr) @ cdecl _mbsnbcnt(ptr long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 5f24c3f7971..55a0a4b1d2d 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1494,7 +1494,7 @@ @ cdecl _mbsnbcat(str str long) @ cdecl _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) -@ stub _mbsnbcat_s_l +@ cdecl _mbsnbcat_s_l(str long ptr long ptr) @ cdecl _mbsnbcmp(str str long) @ cdecl _mbsnbcmp_l(str str long ptr) @ cdecl _mbsnbcnt(ptr long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 42e215d7f79..38d157f8a9a 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -798,7 +798,7 @@ @ cdecl _mbsnbcat(str str long) @ cdecl _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) -@ stub _mbsnbcat_s_l +@ cdecl _mbsnbcat_s_l(str long ptr long ptr) @ cdecl _mbsnbcmp(str str long) @ cdecl _mbsnbcmp_l(str str long ptr) @ cdecl _mbsnbcnt(ptr long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index be847415309..58cb3ef2e92 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -776,7 +776,7 @@ @ cdecl _mbsnbcat(str str long) @ cdecl _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) -@ stub _mbsnbcat_s_l +@ cdecl _mbsnbcat_s_l(str long ptr long ptr) @ cdecl _mbsnbcmp(str str long) @ cdecl _mbsnbcmp_l(str str long ptr) @ cdecl _mbsnbcnt(ptr long) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 01d290b2647..5a140b1b2fa 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2336,20 +2336,22 @@ unsigned char* CDECL _mbsnbcat(unsigned char *dst, const unsigned char *src, siz return _mbsnbcat_l(dst, src, len, NULL); }
-int CDECL _mbsnbcat_s(unsigned char *dst, size_t size, const unsigned char *src, size_t len) +/********************************************************************* + * _mbsnbcat_s_l(MSVCRT.@) + */ +int CDECL _mbsnbcat_s_l(unsigned char *dst, size_t size, const unsigned char *src, size_t len, _locale_t locale) { unsigned char *ptr = dst; size_t i; + pthreadmbcinfo mbcinfo;
if (!dst && !size && !src && !len) return 0;
- if (!dst || !size || !src) + if (!MSVCRT_CHECK_PMT(dst && size && src)) { if (dst && size) *dst = '\0'; - - *_errno() = EINVAL; return EINVAL; }
@@ -2364,9 +2366,14 @@ int CDECL _mbsnbcat_s(unsigned char *dst, size_t size, const unsigned char *src, return EINVAL; }
+ if (locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + /* If necessary, check that the character preceding the null terminator is * a lead byte and move the pointer back by one for later overwrite. */ - if (ptr != dst && get_mbcinfo()->ismbcodepage && _ismbblead(*(ptr - 1))) + if (ptr != dst && mbcinfo->ismbcodepage && _ismbblead_l(*(ptr - 1), locale)) size++, ptr--;
for (i = 0; *src && i < len; i++) @@ -2386,6 +2393,14 @@ int CDECL _mbsnbcat_s(unsigned char *dst, size_t size, const unsigned char *src, return 0; }
+/********************************************************************* + * _mbsnbcat_s(MSVCRT.@) + */ +int CDECL _mbsnbcat_s(unsigned char *dst, size_t size, const unsigned char *src, size_t len) +{ + return _mbsnbcat_s_l(dst, size, src, len, NULL); +} + /********************************************************************* * _mbsncat(MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index a997a4e61d5..738279a2cd3 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -747,7 +747,7 @@ @ cdecl _mbsnbcat(str str long) @ cdecl _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) -# stub _mbsnbcat_s_l(str long ptr long ptr) +@ cdecl _mbsnbcat_s_l(str long ptr long ptr) @ cdecl _mbsnbcmp(str str long) @ cdecl _mbsnbcmp_l(str str long ptr) @ cdecl _mbsnbcnt(ptr long) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index f0b078e09e7..46cea0359b4 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -642,7 +642,7 @@ @ cdecl _mbsnbcat(str str long) @ cdecl _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) -@ stub _mbsnbcat_s_l +@ cdecl _mbsnbcat_s_l(str long ptr long ptr) @ cdecl _mbsnbcmp(str str long) @ cdecl _mbsnbcmp_l(str str long ptr) @ cdecl _mbsnbcnt(ptr long) @@ -1211,7 +1211,7 @@ @ cdecl _o__mbsnbcat(str str long) _mbsnbcat @ cdecl _o__mbsnbcat_l(str str long ptr) _mbsnbcat_l @ cdecl _o__mbsnbcat_s(str long ptr long) _mbsnbcat_s -@ stub _o__mbsnbcat_s_l +@ cdecl _o__mbsnbcat_s_l(str long ptr long ptr) _mbsnbcat_s_l @ cdecl _o__mbsnbcmp(str str long) _mbsnbcmp @ cdecl _o_mbsnbcmp_l(str str long ptr) _mbsnbcmp_l @ cdecl _o__mbsnbcnt(ptr long) _mbsnbcnt
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 | 67 ++++++++++++++++++++++++------------- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 +-- 8 files changed, 51 insertions(+), 32 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 0f57555e454..884289175c0 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1134,7 +1134,7 @@ @ cdecl _mbsnbcoll(str str long) @ cdecl _mbsnbcoll_l(str str long ptr) @ cdecl _mbsnbcpy(ptr str long) -@ stub _mbsnbcpy_l +@ cdecl _mbsnbcpy_l(ptr str long ptr) @ cdecl _mbsnbcpy_s(ptr long str long) @ cdecl _mbsnbcpy_s_l(ptr long str long ptr) @ cdecl _mbsnbicmp(str str long) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 072cef0f0c9..89bb35c7dba 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1491,7 +1491,7 @@ @ cdecl _mbsnbcoll(str str long) @ cdecl _mbsnbcoll_l(str str long ptr) @ cdecl _mbsnbcpy(ptr str long) -@ stub _mbsnbcpy_l +@ cdecl _mbsnbcpy_l(ptr str long ptr) @ cdecl _mbsnbcpy_s(ptr long str long) @ cdecl _mbsnbcpy_s_l(ptr long str long ptr) @ cdecl _mbsnbicmp(str str long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 55a0a4b1d2d..1be83715d23 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1502,7 +1502,7 @@ @ cdecl _mbsnbcoll(str str long) @ cdecl _mbsnbcoll_l(str str long ptr) @ cdecl _mbsnbcpy(ptr str long) -@ stub _mbsnbcpy_l +@ cdecl _mbsnbcpy_l(ptr str long ptr) @ cdecl _mbsnbcpy_s(ptr long str long) @ cdecl _mbsnbcpy_s_l(ptr long str long ptr) @ cdecl _mbsnbicmp(str str long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 38d157f8a9a..78172dbc104 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -806,7 +806,7 @@ @ cdecl _mbsnbcoll(str str long) @ cdecl _mbsnbcoll_l(str str long ptr) @ cdecl _mbsnbcpy(ptr str long) -@ stub _mbsnbcpy_l +@ cdecl _mbsnbcpy_l(ptr str long ptr) @ cdecl _mbsnbcpy_s(ptr long str long) @ cdecl _mbsnbcpy_s_l(ptr long str long ptr) @ cdecl _mbsnbicmp(str str long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 58cb3ef2e92..c1736877ff5 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -784,7 +784,7 @@ @ cdecl _mbsnbcoll(str str long) @ cdecl _mbsnbcoll_l(str str long ptr) @ cdecl _mbsnbcpy(ptr str long) -@ stub _mbsnbcpy_l +@ cdecl _mbsnbcpy_l(ptr str long ptr) @ cdecl _mbsnbcpy_s(ptr long str long) @ cdecl _mbsnbcpy_s_l(ptr long str long ptr) @ cdecl _mbsnbicmp(str str long) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 5a140b1b2fa..d3c2d96ad62 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -993,39 +993,58 @@ int CDECL _mbscpy_s(unsigned char *dst, size_t size, const unsigned char *src) }
/********************************************************************* - * _mbsnbcpy(MSVCRT.@) + * _mbsnbcpy_l(MSVCRT.@) * REMARKS * Like strncpy this function doesn't enforce the string to be * NUL-terminated */ -unsigned char* CDECL _mbsnbcpy(unsigned char* dst, const unsigned char* src, size_t n) +unsigned char* CDECL _mbsnbcpy_l(unsigned char* dst, const unsigned char* src, size_t n, _locale_t locale) { - unsigned char* ret = dst; - if(!n) - return dst; - if(get_mbcinfo()->ismbcodepage) - { - BOOL is_lead = FALSE; - while (*src && n) + unsigned char* ret = dst; + pthreadmbcinfo mbcinfo; + + if (!n) + return dst; + if (!MSVCRT_CHECK_PMT(dst && src)) + return NULL; + if (locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + if (mbcinfo->ismbcodepage) { - is_lead = (!is_lead && _ismbblead(*src)); - n--; - *dst++ = *src++; - } + BOOL is_lead = FALSE; + while (*src && n) + { + is_lead = (!is_lead && _ismbblead_l(*src, locale)); + n--; + *dst++ = *src++; + }
- if (is_lead) /* if string ends with a lead, remove it */ - *(dst - 1) = 0; - } - else - { - while (n) + if (is_lead) /* if string ends with a lead, remove it */ + *(dst - 1) = 0; + } + else { - n--; - if (!(*dst++ = *src++)) break; + while (n) + { + n--; + if (!(*dst++ = *src++)) break; + } } - } - while (n--) *dst++ = 0; - return ret; + while (n--) *dst++ = 0; + return ret; +} + +/********************************************************************* + * _mbsnbcpy(MSVCRT.@) + * REMARKS + * Like strncpy this function doesn't enforce the string to be + * NUL-terminated + */ +unsigned char* CDECL _mbsnbcpy(unsigned char* dst, const unsigned char* src, size_t n) +{ + return _mbsnbcpy_l(dst, src, n, NULL); }
/********************************************************************* diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 738279a2cd3..998bd7268ca 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -755,7 +755,7 @@ @ cdecl _mbsnbcoll(str str long) @ cdecl _mbsnbcoll_l(str str long ptr) @ cdecl _mbsnbcpy(ptr str long) -# stub _mbsnbcpy_l(ptr str long ptr) +@ cdecl _mbsnbcpy_l(ptr str long ptr) @ cdecl _mbsnbcpy_s(ptr long str long) @ cdecl _mbsnbcpy_s_l(ptr long str long ptr) @ cdecl _mbsnbicmp(str str long) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 46cea0359b4..25c3e5ac766 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -650,7 +650,7 @@ @ cdecl _mbsnbcoll(str str long) @ cdecl _mbsnbcoll_l(str str long ptr) @ cdecl _mbsnbcpy(ptr str long) -@ stub _mbsnbcpy_l +@ cdecl _mbsnbcpy_l(ptr str long ptr) @ cdecl _mbsnbcpy_s(ptr long str long) @ cdecl _mbsnbcpy_s_l(ptr long str long ptr) @ cdecl _mbsnbicmp(str str long) @@ -1219,7 +1219,7 @@ @ cdecl _o__mbsnbcoll(str str long) _mbsnbcoll @ cdecl _o__mbsnbcoll_l(str str long ptr) _mbsnbcoll_l @ cdecl _o__mbsnbcpy(ptr str long) _mbsnbcpy -@ stub _o__mbsnbcpy_l +@ cdecl _o__mbsnbcpy_l(ptr str long ptr) _mbsnbcpy_l @ cdecl _o__mbsnbcpy_s(ptr long str long) _mbsnbcpy_s @ cdecl _o__mbsnbcpy_s_l(ptr long str long ptr) _mbsnbcpy_s_l @ cdecl _o__mbsnbicmp(str str long) _mbsnbicmp
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 | 93 ++++++++++++++++++++++--------------- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 +- 8 files changed, 64 insertions(+), 45 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 884289175c0..2e607207780 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1138,7 +1138,7 @@ @ cdecl _mbsnbcpy_s(ptr long str long) @ cdecl _mbsnbcpy_s_l(ptr long str long ptr) @ cdecl _mbsnbicmp(str str long) -@ stub _mbsnbicmp_l +@ cdecl _mbsnbicmp_l(str str long ptr) @ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 89bb35c7dba..4c552a2a80f 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1495,7 +1495,7 @@ @ cdecl _mbsnbcpy_s(ptr long str long) @ cdecl _mbsnbcpy_s_l(ptr long str long ptr) @ cdecl _mbsnbicmp(str str long) -@ stub _mbsnbicmp_l +@ cdecl _mbsnbicmp_l(str str long ptr) @ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 1be83715d23..d60c97a53fc 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1506,7 +1506,7 @@ @ cdecl _mbsnbcpy_s(ptr long str long) @ cdecl _mbsnbcpy_s_l(ptr long str long ptr) @ cdecl _mbsnbicmp(str str long) -@ stub _mbsnbicmp_l +@ cdecl _mbsnbicmp_l(str str long ptr) @ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 78172dbc104..d718ec58cb4 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -810,7 +810,7 @@ @ cdecl _mbsnbcpy_s(ptr long str long) @ cdecl _mbsnbcpy_s_l(ptr long str long ptr) @ cdecl _mbsnbicmp(str str long) -@ stub _mbsnbicmp_l +@ cdecl _mbsnbicmp_l(str str long ptr) @ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index c1736877ff5..d3b51e6cdac 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -788,7 +788,7 @@ @ cdecl _mbsnbcpy_s(ptr long str long) @ cdecl _mbsnbcpy_s_l(ptr long str long ptr) @ cdecl _mbsnbicmp(str str long) -@ stub _mbsnbicmp_l +@ cdecl _mbsnbicmp_l(str str long ptr) @ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index d3c2d96ad62..6d28d246452 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -1362,47 +1362,66 @@ int CDECL _mbsnicmp(const unsigned char* str, const unsigned char* cmp, size_t l }
/********************************************************************* - * _mbsnbicmp(MSVCRT.@) + * _mbsnbicmp_l(MSVCRT.@) */ -int CDECL _mbsnbicmp(const unsigned char* str, const unsigned char* cmp, size_t len) +int CDECL _mbsnbicmp_l(const unsigned char* str, const unsigned char* cmp, size_t len, _locale_t locale) { - if (!len) - return 0; - if(get_mbcinfo()->ismbcodepage) - { - unsigned int strc, cmpc; - while (len) + + pthreadmbcinfo mbcinfo; + + if (!len) + return 0; + if (!MSVCRT_CHECK_PMT(str && cmp)) + return _NLSCMPERROR; + + if (locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + + if (mbcinfo->ismbcodepage) { - int clen; - if(!*str) - return *cmp ? -1 : 0; - if(!*cmp) - return 1; - if (_ismbblead(*str)) - { - strc=(len>=2)?_mbsnextc(str):0; - clen=2; - } - else - { - strc=*str; - clen=1; - } - if (_ismbblead(*cmp)) - cmpc=(len>=2)?_mbsnextc(cmp):0; - else - cmpc=*cmp; - strc = _mbctolower(strc); - cmpc = _mbctolower(cmpc); - if(strc != cmpc) - return strc < cmpc ? -1 : 1; - len -= clen; - str += clen; - cmp += clen; + unsigned int strc, cmpc; + while (len) + { + int clen; + if (!*str) + return *cmp ? -1 : 0; + if (!*cmp) + return 1; + if (_ismbblead_l(*str, locale)) + { + strc = (len >= 2) ? _mbsnextc_l(str, locale) : 0; + clen = 2; + } + else + { + strc=*str; + clen=1; + } + if (_ismbblead_l(*cmp, locale)) + cmpc = (len >= 2) ? _mbsnextc_l(cmp, locale) : 0; + else + cmpc = *cmp; + strc = _mbctolower_l(strc, locale); + cmpc = _mbctolower_l(cmpc, locale); + if (strc != cmpc) + return strc < cmpc ? -1 : 1; + len -= clen; + str += clen; + cmp += clen; + } + return 0; /* Matched len bytes */ } - return 0; /* Matched len bytes */ - } - return u_strncasecmp(str,cmp,len); + return u_strncasecmp(str, cmp, len); +} + +/********************************************************************* + * _mbsnbicmp(MSVCRT.@) + */ +int CDECL _mbsnbicmp(const unsigned char* str, const unsigned char* cmp, size_t len) +{ + return _mbsnbicmp_l(str, cmp, len, NULL); }
/********************************************************************* diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 998bd7268ca..e62e221b2b3 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -759,7 +759,7 @@ @ cdecl _mbsnbcpy_s(ptr long str long) @ cdecl _mbsnbcpy_s_l(ptr long str long ptr) @ cdecl _mbsnbicmp(str str long) -# stub _mbsnbicmp_l(str str long ptr) +@ cdecl _mbsnbicmp_l(str str long ptr) @ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 25c3e5ac766..1ed734b76d8 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -654,7 +654,7 @@ @ cdecl _mbsnbcpy_s(ptr long str long) @ cdecl _mbsnbcpy_s_l(ptr long str long ptr) @ cdecl _mbsnbicmp(str str long) -@ stub _mbsnbicmp_l +@ cdecl _mbsnbicmp_l(str str long ptr) @ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) @@ -1223,7 +1223,7 @@ @ cdecl _o__mbsnbcpy_s(ptr long str long) _mbsnbcpy_s @ cdecl _o__mbsnbcpy_s_l(ptr long str long ptr) _mbsnbcpy_s_l @ cdecl _o__mbsnbicmp(str str long) _mbsnbicmp -@ stub _o__mbsnbicmp_l +@ cdecl _o__mbsnbicmp_l(str str long ptr) _mbsnbicmp_l @ cdecl _o__mbsnbicoll(str str long) _mbsnbicoll @ cdecl _o__mbsnbicoll_l(str str long ptr) _mbsnbicoll_l @ cdecl _o__mbsnbset(ptr long long) _mbsnbset
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 | 45 +++++++++++++++++++++++++------------ dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 7 files changed, 38 insertions(+), 21 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 2e607207780..121ff766807 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1142,7 +1142,7 @@ @ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) -@ stub _mbsnbset_l +@ cdecl _mbsnbset_l(str long long ptr) @ stub _mbsnbset_s @ stub _mbsnbset_s_l @ cdecl _mbsncat(str str long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index d60c97a53fc..0aa7cafb660 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1510,7 +1510,7 @@ @ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) -@ stub _mbsnbset_l +@ cdecl _mbsnbset_l(str long long ptr) @ stub _mbsnbset_s @ stub _mbsnbset_s_l @ cdecl _mbsncat(str str long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index d718ec58cb4..52a9fbce0dc 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -814,7 +814,7 @@ @ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) -@ stub _mbsnbset_l +@ cdecl _mbsnbset_l(str long long ptr) @ stub _mbsnbset_s @ stub _mbsnbset_s_l @ cdecl _mbsncat(str str long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index d3b51e6cdac..78521a857ae 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -792,7 +792,7 @@ @ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) -@ stub _mbsnbset_l +@ cdecl _mbsnbset_l(str long long ptr) @ stub _mbsnbset_s @ stub _mbsnbset_s_l @ cdecl _mbsncat(str str long) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 6d28d246452..7c15794655e 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2200,35 +2200,52 @@ unsigned char* CDECL _mbsset(unsigned char* str, unsigned int c) }
/********************************************************************* - * _mbsnbset(MSVCRT.@) + * _mbsnbset_l(MSVCRT.@) */ -unsigned char* CDECL _mbsnbset(unsigned char *str, unsigned int c, size_t len) +unsigned char* CDECL _mbsnbset_l(unsigned char *str, unsigned int c, size_t len, _locale_t locale) { unsigned char *ret = str; + pthreadmbcinfo mbcinfo;
- if(!len) - return ret; + if (!len) + return ret; + if (!MSVCRT_CHECK_PMT(str)) + return NULL; + + if (locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo();
- if(!get_mbcinfo()->ismbcodepage || c < 256) - return u__strnset(str, c, len); /* ASCII CP or SB char */ + if (!mbcinfo->ismbcodepage || c < 256) + return u__strnset(str, c, len); /* ASCII CP or SB char */
c &= 0xffff; /* Strip high bits */
- while(str[0] && str[1] && (len > 1)) + while (str[0] && str[1] && (len > 1)) { - *str++ = c >> 8; - len--; - *str++ = c & 0xff; - len--; + *str++ = c >> 8; + len--; + *str++ = c & 0xff; + len--; } - if(len && str[0]) { - /* as per msdn pad with a blank character */ - str[0] = ' '; + if (len && str[0]) + { + /* as per msdn pad with a blank character */ + str[0] = ' '; }
return ret; }
+/********************************************************************* + * _mbsnbset(MSVCRT.@) + */ +unsigned char* CDECL _mbsnbset(unsigned char *str, unsigned int c, size_t len) +{ + return _mbsnbset_l(str, c, len, NULL); +} + /********************************************************************* * _mbsnset(MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index e62e221b2b3..de58dd39a93 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -763,7 +763,7 @@ @ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) -# stub _mbsnbset_l(str long long ptr) +@ cdecl _mbsnbset_l(str long long ptr) # stub _mbsnbset_s(ptr long long long) # stub _mbsnbset_s_l(ptr long long long ptr) @ cdecl _mbsncat(str str long) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 1ed734b76d8..a18f5d6e397 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -658,7 +658,7 @@ @ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) -@ stub _mbsnbset_l +@ cdecl _mbsnbset_l(str long long ptr) @ stub _mbsnbset_s @ stub _mbsnbset_s_l @ cdecl _mbsncat(str str long) @@ -1227,7 +1227,7 @@ @ cdecl _o__mbsnbicoll(str str long) _mbsnbicoll @ cdecl _o__mbsnbicoll_l(str str long ptr) _mbsnbicoll_l @ cdecl _o__mbsnbset(ptr long long) _mbsnbset -@ stub _o__mbsnbset_l +@ cdecl _o__mbsnbset_l(str long long ptr) _mbsnbset_l @ stub _o__mbsnbset_s @ stub _o__mbsnbset_s_l @ cdecl _o__mbsncat(str str long) _mbsncat
From: Bartosz Kosiorek gang65@poczta.onet.pl
--- dlls/msvcr100/msvcr100.spec | 4 +-- dlls/msvcr110/msvcr110.spec | 4 +-- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/mbcs.c | 56 +++++++++++++++++++++++++------------ dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 +-- 8 files changed, 48 insertions(+), 28 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 121ff766807..ec6afbd2b79 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1146,12 +1146,12 @@ @ stub _mbsnbset_s @ stub _mbsnbset_s_l @ cdecl _mbsncat(str str long) -@ stub _mbsncat_l +@ cdecl _mbsncat_l(str str long ptr) @ stub _mbsncat_s @ stub _mbsncat_s_l @ cdecl _mbsnccnt(str long) @ stub _mbsnccnt_l -@ cdecl _mbsncmp(str str long) +@ cdecl _mbsncmp(str str long)_mbsncat @ stub _mbsncmp_l @ stub _mbsncoll(str str long) @ stub _mbsncoll_l diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 4c552a2a80f..bc143f34505 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1499,11 +1499,11 @@ @ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) -@ stub _mbsnbset_l +@ cdecl _mbsnbset_l(str long long ptr) @ stub _mbsnbset_s @ stub _mbsnbset_s_l @ cdecl _mbsncat(str str long) -@ stub _mbsncat_l +@ cdecl _mbsncat_l(str str long ptr) @ stub _mbsncat_s @ stub _mbsncat_s_l @ cdecl _mbsnccnt(str long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 0aa7cafb660..cd76f568557 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1514,7 +1514,7 @@ @ stub _mbsnbset_s @ stub _mbsnbset_s_l @ cdecl _mbsncat(str str long) -@ stub _mbsncat_l +@ cdecl _mbsncat_l(str str long ptr) @ stub _mbsncat_s @ stub _mbsncat_s_l @ cdecl _mbsnccnt(str long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 52a9fbce0dc..5bc963edf57 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -818,7 +818,7 @@ @ stub _mbsnbset_s @ stub _mbsnbset_s_l @ cdecl _mbsncat(str str long) -@ stub _mbsncat_l +@ cdecl _mbsncat_l(str str long ptr) @ stub _mbsncat_s @ stub _mbsncat_s_l @ cdecl _mbsnccnt(str long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 78521a857ae..a7f47e568c7 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -796,7 +796,7 @@ @ stub _mbsnbset_s @ stub _mbsnbset_s_l @ cdecl _mbsncat(str str long) -@ stub _mbsncat_l +@ cdecl _mbsncat_l(str str long ptr) @ stub _mbsncat_s @ stub _mbsncat_s_l @ cdecl _mbsnccnt(str long) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 7c15794655e..d6aea99559f 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2457,30 +2457,50 @@ int CDECL _mbsnbcat_s(unsigned char *dst, size_t size, const unsigned char *src, }
/********************************************************************* - * _mbsncat(MSVCRT.@) + * _mbsncat_l(MSVCRT.@) */ -unsigned char* CDECL _mbsncat(unsigned char* dst, const unsigned char* src, size_t len) +unsigned char* CDECL _mbsncat_l(unsigned char* dst, const unsigned char* src, size_t len, _locale_t locale) { - if(get_mbcinfo()->ismbcodepage) - { - unsigned char *res = dst; - while (*dst) - { - if (_ismbblead(*dst++)) - dst++; - } - while (*src && len--) + pthreadmbcinfo mbcinfo; + + if (!len) + return dst; + + if (!MSVCRT_CHECK_PMT(dst && src)) + return NULL; + + if (locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + + if(mbcinfo->ismbcodepage) { - *dst++ = *src; - if(_ismbblead(*src++)) - *dst++ = *src++; + unsigned char *res = dst; + while (*dst) + { + if (_ismbblead_l(*dst++, locale)) + dst++; + } + while (*src && len--) + { + *dst++ = *src; + if(_ismbblead_l(*src++, locale)) + *dst++ = *src++; + } + *dst = '\0'; + return res; } - *dst = '\0'; - return res; - } - return u_strncat(dst, src, len); /* ASCII CP */ + return u_strncat(dst, src, len); /* ASCII CP */ }
+/********************************************************************* + * _mbsncat(MSVCRT.@) + */ +unsigned char* CDECL _mbsncat(unsigned char* dst, const unsigned char* src, size_t len) +{ + return _mbsncat_l(dst, src, len, NULL); +}
/********************************************************************* * _mbslwr_l(MSVCRT.@) diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index de58dd39a93..ff6f14b884f 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -767,7 +767,7 @@ # stub _mbsnbset_s(ptr long long long) # stub _mbsnbset_s_l(ptr long long long ptr) @ cdecl _mbsncat(str str long) -# stub _mbsncat_l(str str long ptr) +@ cdecl _mbsncat_l(str str long ptr) # stub _mbsncat_s(str long str long) # stub _mbsncat_s_l(str long str long ptr) @ cdecl _mbsnccnt(str long) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index a18f5d6e397..91c54e1a31c 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -662,7 +662,7 @@ @ stub _mbsnbset_s @ stub _mbsnbset_s_l @ cdecl _mbsncat(str str long) -@ stub _mbsncat_l +@ cdecl _mbsncat_l(str str long ptr) @ stub _mbsncat_s @ stub _mbsncat_s_l @ cdecl _mbsnccnt(str long) @@ -1231,7 +1231,7 @@ @ stub _o__mbsnbset_s @ stub _o__mbsnbset_s_l @ cdecl _o__mbsncat(str str long) _mbsncat -@ stub _o__mbsncat_l +@ cdecl _o__mbsncat_l(str str long ptr) _mbsncat_l @ stub _o__mbsncat_s @ stub _o__mbsncat_s_l @ cdecl _o__mbsnccnt(str long) _mbsnccnt
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
From: Bartosz Kosiorek gang65@poczta.onet.pl
--- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 4 ++-- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/mbcs.c | 46 +++++++++++++++++++++++++------------ dlls/ucrtbase/ucrtbase.spec | 4 ++-- 7 files changed, 39 insertions(+), 23 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index cd18dc50306..b561b58405e 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1170,7 +1170,7 @@ @ cdecl _mbsnlen(str long) @ cdecl _mbsnlen_l(str long ptr) @ cdecl _mbsnset(ptr long long) -@ stub _mbsnset_l +@ cdecl _mbsnset_l(ptr long long ptr) @ stub _mbsnset_s @ stub _mbsnset_s_l @ cdecl _mbspbrk(str str) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index bc143f34505..1937ffc9efb 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1507,7 +1507,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) @@ -1527,7 +1527,7 @@ @ cdecl _mbsnlen(str long) @ cdecl _mbsnlen_l(str long ptr) @ cdecl _mbsnset(ptr long long) -@ stub _mbsnset_l +@ cdecl _mbsnset_l(ptr long long ptr) @ stub _mbsnset_s @ stub _mbsnset_s_l @ cdecl _mbspbrk(str str) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 19814e9dc6b..462a42b719b 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1538,7 +1538,7 @@ @ cdecl _mbsnlen(str long) @ cdecl _mbsnlen_l(str long ptr) @ cdecl _mbsnset(ptr long long) -@ stub _mbsnset_l +@ cdecl _mbsnset_l(ptr long long ptr) @ stub _mbsnset_s @ stub _mbsnset_s_l @ cdecl _mbspbrk(str str) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index be691c2a4e9..822a43d5765 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -842,7 +842,7 @@ @ cdecl _mbsnlen(str long) @ cdecl _mbsnlen_l(str long ptr) @ cdecl _mbsnset(ptr long long) -@ stub _mbsnset_l +@ cdecl _mbsnset_l(ptr long long ptr) @ stub _mbsnset_s @ stub _mbsnset_s_l @ cdecl _mbspbrk(str str) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index ba0ff67b362..32075829392 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -820,7 +820,7 @@ @ cdecl _mbsnlen(str long) @ cdecl _mbsnlen_l(str long ptr) @ cdecl _mbsnset(ptr long long) -@ stub _mbsnset_l +@ cdecl _mbsnset_l(ptr long long ptr) @ stub _mbsnset_s @ stub _mbsnset_s_l @ cdecl _mbspbrk(str str) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index dab152396c6..aedcd42b155 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2249,27 +2249,43 @@ unsigned char* CDECL _mbsnbset(unsigned char *str, unsigned int c, size_t len) /********************************************************************* * _mbsnset(MSVCRT.@) */ -unsigned char* CDECL _mbsnset(unsigned char* str, unsigned int c, size_t len) +unsigned char* CDECL _mbsnset_l(unsigned char* str, unsigned int c, size_t len, _locale_t locale) { - unsigned char *ret = str; + unsigned char *ret = str; + pthreadmbcinfo mbcinfo;
- if(!len) - return ret; + if (!len) + return ret; + if (!MSVCRT_CHECK_PMT(str)) + return NULL;
- if(!get_mbcinfo()->ismbcodepage || c < 256) - return u__strnset(str, c, len); /* ASCII CP or SB char */ + if (locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo();
- c &= 0xffff; /* Strip high bits */ + if (!mbcinfo->ismbcodepage || c < 256) + return u__strnset(str, c, len); /* ASCII CP or SB char */
- while(str[0] && str[1] && len--) - { - *str++ = c >> 8; - *str++ = c & 0xff; - } - if(len && str[0]) - str[0] = '\0'; /* FIXME: OK to shorten? */ + c &= 0xffff; /* Strip high bits */
- return ret; + while (str[0] && str[1] && len--) + { + *str++ = c >> 8; + *str++ = c & 0xff; + } + if (len && str[0]) + str[0] = '\0'; /* FIXME: OK to shorten? */ + + return ret; +} + +/********************************************************************* + * _mbsnset(MSVCRT.@) + */ +unsigned char* CDECL _mbsnset(unsigned char* str, unsigned int c, size_t len) +{ + return _mbsnset_l(str, c, len, NULL); }
/********************************************************************* diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 45a92bdf94f..75f21a447c7 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -686,7 +686,7 @@ @ cdecl _mbsnlen(str long) @ cdecl _mbsnlen_l(str long ptr) @ cdecl _mbsnset(ptr long long) -@ stub _mbsnset_l +@ cdecl _mbsnset_l(ptr long long ptr) @ stub _mbsnset_s @ stub _mbsnset_s_l @ cdecl _mbspbrk(str str) @@ -1255,7 +1255,7 @@ @ cdecl _o__mbsnlen(str long) _mbsnlen @ cdecl _o__mbsnlen_l(str long ptr) _mbsnlen_l @ cdecl _o__mbsnset(ptr long long) _mbsnset -@ stub _o__mbsnset_l +@ cdecl _o__mbsnset_l(ptr long long ptr) _mbsnset_l @ stub _o__mbsnset_s @ stub _o__mbsnset_s_l @ cdecl _o__mbspbrk(str str) _mbspbrk
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=139612
Your paranoid android.
=== debian11 (build log) ===
error: patch failed: dlls/msvcr100/msvcr100.spec:1126 error: patch failed: dlls/msvcr110/msvcr110.spec:1483 error: patch failed: dlls/msvcr120/msvcr120.spec:1494 error: patch failed: dlls/msvcr80/msvcr80.spec:798 error: patch failed: dlls/msvcr90/msvcr90.spec:776 error: patch failed: dlls/msvcrt/msvcrt.spec:747 error: patch failed: dlls/ucrtbase/ucrtbase.spec:642 Task: Patch failed to apply
=== debian11b (build log) ===
error: patch failed: dlls/msvcr100/msvcr100.spec:1126 error: patch failed: dlls/msvcr110/msvcr110.spec:1483 error: patch failed: dlls/msvcr120/msvcr120.spec:1494 error: patch failed: dlls/msvcr80/msvcr80.spec:798 error: patch failed: dlls/msvcr90/msvcr90.spec:776 error: patch failed: dlls/msvcrt/msvcrt.spec:747 error: patch failed: dlls/ucrtbase/ucrtbase.spec:642 Task: Patch failed to apply
Piotr Caban (@piotr) commented about dlls/msvcrt/mbcs.c:
return _mbsnbcat_l(dst, src, len, NULL);
}
-int CDECL _mbsnbcat_s(unsigned char *dst, size_t size, const unsigned char *src, size_t len) +/*********************************************************************
_mbsnbcat_s_l(MSVCRT.@)
- */
+int CDECL _mbsnbcat_s_l(unsigned char *dst, size_t size, const unsigned char *src, size_t len, _locale_t locale) { unsigned char *ptr = dst; size_t i;
pthreadmbcinfo mbcinfo;
if (!dst && !size && !src && !len)
```suggestion:-0+0 if (!dst && !size && !len) ```
Piotr Caban (@piotr) commented about dlls/msvcrt/mbcs.c:
}
if (_ismbblead(*cmp))
cmpc=(len>=2)?_mbsnextc(cmp):0;
else
cmpc=*cmp;
strc = _mbctolower(strc);
cmpc = _mbctolower(cmpc);
if(strc != cmpc)
return strc < cmpc ? -1 : 1;
len -= clen;
str += clen;
cmp += clen;
unsigned int strc, cmpc;
while (len)
{
int clen;
```suggestion:-2+0 while (len) { int clen; ```
Piotr Caban (@piotr) commented about dlls/msvcrt/mbcs.c:
while (len)
{
int clen;
if (!*str)
return *cmp ? -1 : 0;
if (!*cmp)
return 1;
if (_ismbblead_l(*str, locale))
{
strc = (len >= 2) ? _mbsnextc_l(str, locale) : 0;
clen = 2;
}
else
{
strc=*str;
clen=1;
```suggestion:-1+0 strc = *str; clen = 1; ```
Piotr Caban (@piotr) commented about dlls/msvcr100/msvcr100.spec:
@ stub _mbsnbset_s @ stub _mbsnbset_s_l @ cdecl _mbsncat(str str long) -@ stub _mbsncat_l +@ cdecl _mbsncat_l(str str long ptr) @ stub _mbsncat_s @ stub _mbsncat_s_l @ cdecl _mbsnccnt(str long) @ stub _mbsnccnt_l -@ cdecl _mbsncmp(str str long) +@ cdecl _mbsncmp(str str long)_mbsncat
```suggestion:-0+0 @ cdecl _mbsncmp(str str long) ```
Piotr Caban (@piotr) commented about dlls/msvcr110/msvcr110.spec:
@ cdecl _mbsnbicoll(str str long) @ cdecl _mbsnbicoll_l(str str long ptr) @ cdecl _mbsnbset(ptr long long) -@ stub _mbsnbset_l +@ cdecl _mbsnbset_l(str long long ptr)
This belongs to a different patch.
Piotr Caban (@piotr) commented about dlls/msvcrt/mbcs.c:
- if (locale)
mbcinfo = locale->mbcinfo;
- else
mbcinfo = get_mbcinfo();
- if(mbcinfo->ismbcodepage) {
*dst++ = *src;
if(_ismbblead(*src++))
*dst++ = *src++;
unsigned char *res = dst;
while (*dst)
{
if (_ismbblead_l(*dst++, locale))
dst++;
}
```suggestion:-4+0 while (*dst) { if (_ismbblead_l(*dst++, locale)) dst++; } ```
Piotr Caban (@piotr) commented about dlls/msvcr110/msvcr110.spec:
@ stub _mbsncat_s @ stub _mbsncat_s_l @ cdecl _mbsnccnt(str long) -@ stub _mbsnccnt_l +@ cdecl _mbsnccnt_l(str long ptr)
This should be part of different patch.