-- v6: msvcrt: Add _mbsnbcat_l implementation. msvcrt: Add _cwprintf_l implementation. msvcrt: Add _cprintf_l implementation. msvcrt: Add _mbsrchr_l implementation. msvcrt: Add _mbslwr_l implementation.
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 | 49 ++++++++++++++++++++++++++----------- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 +-- 8 files changed, 43 insertions(+), 22 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 37aee60487d..4f6e01ca065 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1110,7 +1110,7 @@ @ cdecl _mbscspn(str str) @ cdecl _mbscspn_l(str str ptr) @ cdecl _mbsdec(ptr ptr) -@ stub _mbsdec_l +@ cdecl _mbsdec_l(ptr ptr ptr) @ cdecl _mbsicmp(str str) @ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index d1fc7c2de55..51a68603d4f 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1467,7 +1467,7 @@ @ cdecl _mbscspn(str str) @ cdecl _mbscspn_l(str str ptr) @ cdecl _mbsdec(ptr ptr) -@ stub _mbsdec_l +@ cdecl _mbsdec_l(ptr ptr ptr) @ cdecl _mbsicmp(str str) @ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 9576cd52edb..b004a9c51d4 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1478,7 +1478,7 @@ @ cdecl _mbscspn(str str) @ cdecl _mbscspn_l(str str ptr) @ cdecl _mbsdec(ptr ptr) -@ stub _mbsdec_l +@ cdecl _mbsdec_l(ptr ptr ptr) @ cdecl _mbsicmp(str str) @ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 6c3c87ada0f..bca11a6c9c3 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -782,7 +782,7 @@ @ cdecl _mbscspn(str str) @ cdecl _mbscspn_l(str str ptr) @ cdecl _mbsdec(ptr ptr) -@ stub _mbsdec_l +@ cdecl _mbsdec_l(ptr ptr ptr) @ cdecl _mbsicmp(str str) @ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index efaef544b7d..0ead41a4f8d 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -760,7 +760,7 @@ @ cdecl _mbscspn(str str) @ cdecl _mbscspn_l(str str ptr) @ cdecl _mbsdec(ptr ptr) -@ stub _mbsdec_l +@ cdecl _mbsdec_l(ptr ptr ptr) @ cdecl _mbsicmp(str str) @ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index c8390288d4a..e1c33fa2e66 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -669,20 +669,6 @@ unsigned int CDECL _mbcjmstojis(unsigned int c) return _mbcjmstojis_l(c, NULL); }
-/********************************************************************* - * _mbsdec(MSVCRT.@) - */ -unsigned char* CDECL _mbsdec(const unsigned char* start, const unsigned char* cur) -{ - if(start >= cur) - return NULL; - - if(get_mbcinfo()->ismbcodepage) - return (unsigned char *)(_ismbstrail(start,cur-1) ? cur - 2 : cur -1); - - return (unsigned char *)cur - 1; /* ASCII CP or SB char */ -} - /********************************************************************* * _mbclen_l(MSVCRT.@) */ @@ -1970,6 +1956,41 @@ int CDECL _ismbstrail(const unsigned char* start, const unsigned char* str) return _ismbstrail_l(start, str, NULL); }
+/********************************************************************* + * _mbsdec_l(MSVCRT.@) + */ +unsigned char* CDECL _mbsdec_l(const unsigned char* start, const unsigned char* cur, _locale_t locale) +{ + pthreadmbcinfo mbcinfo; + + if (!MSVCRT_CHECK_PMT(start && cur)) + { + *_errno() = EINVAL; + return NULL; + } + if(start >= cur) + return NULL; + + if(!locale) + mbcinfo = get_mbcinfo(); + else + mbcinfo = locale->mbcinfo; + + if(mbcinfo->ismbcodepage) + return (unsigned char *)(_ismbstrail_l(start, cur-1, locale) ? cur - 2 : cur -1); + + return (unsigned char *)cur - 1; /* ASCII CP or SB char */ +} + +/********************************************************************* + * _mbsdec(MSVCRT.@) + */ +unsigned char* CDECL _mbsdec(const unsigned char* start, const unsigned char* cur) +{ + return _mbsdec_l(start, cur, NULL); +} + + /********************************************************************* * _mbbtype_l(MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 8515f13263f..a0dbc5f8fe4 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -729,7 +729,7 @@ @ cdecl _mbscspn(str str) @ cdecl _mbscspn_l(str str ptr) @ cdecl _mbsdec(ptr ptr) -# stub _mbsdec_l(ptr ptr ptr) +@ cdecl _mbsdec_l(ptr ptr ptr) @ cdecl _mbsdup(str) _strdup # stub _strdup_dbg(str long str long) @ cdecl _mbsicmp(str str) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index bb505b42afb..ec580948af7 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -625,7 +625,7 @@ @ cdecl _mbscspn(str str) @ cdecl _mbscspn_l(str str ptr) @ cdecl _mbsdec(ptr ptr) -@ stub _mbsdec_l +@ cdecl _mbsdec_l(ptr ptr ptr) @ cdecl _mbsdup(str) _strdup @ cdecl _mbsicmp(str str) @ cdecl _mbsicmp_l(str str ptr) @@ -1195,7 +1195,7 @@ @ cdecl _o__mbscspn(str str) _mbscspn @ cdecl _o__mbscspn_l(str str ptr) _mbscspn_l @ cdecl _o__mbsdec(ptr ptr) _mbsdec -@ stub _o__mbsdec_l +@ cdecl _o__mbsdec_l(ptr ptr ptr) _mbsdec_l @ cdecl _o__mbsicmp(str str) _mbsicmp @ cdecl _o__mbsicmp_l(str str ptr) _mbsicmp_l @ cdecl _o__mbsicoll(str str) _mbsicoll
From: Bartosz Kosiorek gang65@poczta.onet.pl
--- dlls/msvcrt/mbcs.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index e1c33fa2e66..3353be5d9b2 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -343,7 +343,7 @@ threadmbcinfo* create_mbcinfo(int cp, LCID lcid, threadmbcinfo *old_mbcinfo) } else if (chartypes[charcount] & C1_LOWER) { - mbcinfo->mbctype[i + 1] |= _SBLOW; + mbcinfo->mbctype[i + 1] |= _SBLOW; bufW[charcount] = upW[charcount]; } charcount++; @@ -995,7 +995,7 @@ unsigned char* CDECL _mbsnbcpy(unsigned char* dst, const unsigned char* src, siz }
if (is_lead) /* if string ends with a lead, remove it */ - *(dst - 1) = 0; + *(dst - 1) = 0; } else { @@ -2073,23 +2073,23 @@ unsigned char* CDECL _mbsnbset(unsigned char *str, unsigned int c, size_t len) unsigned char *ret = str;
if(!len) - return ret; + return ret;
if(!get_mbcinfo()->ismbcodepage || c < 256) - return u__strnset(str, c, len); /* ASCII CP or SB char */ + return u__strnset(str, c, len); /* ASCII CP or SB char */
c &= 0xffff; /* Strip high bits */
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] = ' '; + /* as per msdn pad with a blank character */ + str[0] = ' '; }
return ret; @@ -2179,16 +2179,16 @@ unsigned char* CDECL _mbsnbcat(unsigned char* dst, const unsigned char* src, siz { unsigned char *res = dst; while (*dst) { - if (_ismbblead(*dst++)) { - if (*dst) { - dst++; - } else { - /* as per msdn overwrite the lead byte in front of '\0' */ - dst--; - break; - } - } - } + if (_ismbblead(*dst++)) { + if (*dst) { + dst++; + } else { + /* as per msdn overwrite the lead byte in front of '\0' */ + dst--; + break; + } + } + } while (*src && len--) *dst++ = *src++; *dst = '\0'; return res;
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 | 29 ++++++++++++++++++++++++----- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 32 insertions(+), 13 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 4f6e01ca065..bb85301bce6 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1120,7 +1120,7 @@ @ cdecl _mbslen(str) @ cdecl _mbslen_l(str ptr) @ cdecl _mbslwr(str) -@ stub _mbslwr_l +@ cdecl _mbslwr_l(str ptr) @ cdecl _mbslwr_s(str long) @ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 51a68603d4f..29a16dbdc40 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1477,7 +1477,7 @@ @ cdecl _mbslen(str) @ cdecl _mbslen_l(str ptr) @ cdecl _mbslwr(str) -@ stub _mbslwr_l +@ cdecl _mbslwr_l(str ptr) @ cdecl _mbslwr_s(str long) @ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index b004a9c51d4..97331627485 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1488,7 +1488,7 @@ @ cdecl _mbslen(str) @ cdecl _mbslen_l(str ptr) @ cdecl _mbslwr(str) -@ stub _mbslwr_l +@ cdecl _mbslwr_l(str ptr) @ cdecl _mbslwr_s(str long) @ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index bca11a6c9c3..55f058965d5 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -792,7 +792,7 @@ @ cdecl _mbslen(str) @ cdecl _mbslen_l(str ptr) @ cdecl _mbslwr(str) -@ stub _mbslwr_l +@ cdecl _mbslwr_l(str ptr) @ cdecl _mbslwr_s(str long) @ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 0ead41a4f8d..cdd0117aeb4 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -770,7 +770,7 @@ @ cdecl _mbslen(str) @ cdecl _mbslen_l(str ptr) @ cdecl _mbslwr(str) -@ stub _mbslwr_l +@ cdecl _mbslwr_l(str ptr) @ cdecl _mbslwr_s(str long) @ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 3353be5d9b2..350ab74df25 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2273,19 +2273,30 @@ unsigned char* CDECL _mbsncat(unsigned char* dst, const unsigned char* src, size
/********************************************************************* - * _mbslwr(MSVCRT.@) + * _mbslwr_l(MSVCRT.@) */ -unsigned char* CDECL _mbslwr(unsigned char* s) +unsigned char* CDECL _mbslwr_l(unsigned char* s, _locale_t locale) { + pthreadmbcinfo mbcinfo; unsigned char *ret = s; + if (!s) + { + *_errno() = EINVAL; return NULL; - if (get_mbcinfo()->ismbcodepage) + } + + if(locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + + if (mbcinfo->ismbcodepage) { unsigned int c; while (*s) { - c = _mbctolower(_mbsnextc(s)); + c = _mbctolower_l(_mbsnextc_l(s, locale), locale); /* Note that I assume that the size of the character is unchanged */ if (c > 255) { @@ -2295,10 +2306,18 @@ unsigned char* CDECL _mbslwr(unsigned char* s) *s++=c; } } - else for ( ; *s; s++) *s = _tolower_l(*s, NULL); + else for ( ; *s; s++) *s = _tolower_l(*s, locale); return ret; }
+/********************************************************************* + * _mbslwr(MSVCRT.@) + */ +unsigned char* CDECL _mbslwr(unsigned char* s) +{ + return _mbslwr_l(s, NULL); +} + /********************************************************************* * _mbslwr_s_l(MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index a0dbc5f8fe4..bce48873271 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -741,7 +741,7 @@ @ cdecl _mbslen(str) @ cdecl _mbslen_l(str ptr) @ cdecl _mbslwr(str) -# stub _mbslwr_l(str ptr) +@ cdecl _mbslwr_l(str ptr) @ cdecl _mbslwr_s(str long) @ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index ec580948af7..28805ceb98f 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -636,7 +636,7 @@ @ cdecl _mbslen(str) @ cdecl _mbslen_l(str ptr) @ cdecl _mbslwr(str) -@ stub _mbslwr_l +@ cdecl _mbslwr_l(str ptr) @ cdecl _mbslwr_s(str long) @ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) @@ -1205,7 +1205,7 @@ @ cdecl _o__mbslen(str) _mbslen @ cdecl _o__mbslen_l(str ptr) _mbslen_l @ cdecl _o__mbslwr(str) _mbslwr -@ stub _o__mbslwr_l +@ cdecl _o__mbslwr_l(str ptr) _mbslwr_l @ cdecl _o__mbslwr_s(str long) _mbslwr_s @ cdecl _o__mbslwr_s_l(str long ptr) _mbslwr_s_l @ cdecl _o__mbsnbcat(str str long) _mbsnbcat
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 | 30 ++++++++++++++++++++++++------ dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 32 insertions(+), 14 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index bb85301bce6..a39b15c6707 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1176,7 +1176,7 @@ @ cdecl _mbspbrk(str str) @ stub _mbspbrk_l @ cdecl _mbsrchr(str long) -@ stub _mbsrchr_l +@ cdecl _mbsrchr_l(str long ptr) @ cdecl _mbsrev(str) @ stub _mbsrev_l @ cdecl _mbsset(ptr long) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 29a16dbdc40..a48d98455ce 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1533,7 +1533,7 @@ @ cdecl _mbspbrk(str str) @ stub _mbspbrk_l @ cdecl _mbsrchr(str long) -@ stub _mbsrchr_l +@ cdecl _mbsrchr_l(str long ptr) @ cdecl _mbsrev(str) @ stub _mbsrev_l @ cdecl _mbsset(ptr long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 97331627485..b23663783a7 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1544,7 +1544,7 @@ @ cdecl _mbspbrk(str str) @ stub _mbspbrk_l @ cdecl _mbsrchr(str long) -@ stub _mbsrchr_l +@ cdecl _mbsrchr_l(str long ptr) @ cdecl _mbsrev(str) @ stub _mbsrev_l @ cdecl _mbsset(ptr long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 55f058965d5..ec570c8ab1f 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -848,7 +848,7 @@ @ cdecl _mbspbrk(str str) @ stub _mbspbrk_l @ cdecl _mbsrchr(str long) -@ stub _mbsrchr_l +@ cdecl _mbsrchr_l(str long ptr) @ cdecl _mbsrev(str) @ stub _mbsrev_l @ cdecl _mbsset(ptr long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index cdd0117aeb4..b7d60374372 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -826,7 +826,7 @@ @ cdecl _mbspbrk(str str) @ stub _mbspbrk_l @ cdecl _mbsrchr(str long) -@ stub _mbsrchr_l +@ cdecl _mbsrchr_l(str long ptr) @ cdecl _mbsrev(str) @ stub _mbsrev_l @ cdecl _mbsset(ptr long) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 350ab74df25..0dfd4781e31 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -1442,18 +1442,28 @@ unsigned char* CDECL _mbschr(const unsigned char* s, unsigned int x) }
/********************************************************************* - * _mbsrchr(MSVCRT.@) + * _mbsrchr_l(MSVCRT.@) */ -unsigned char* CDECL _mbsrchr(const unsigned char* s, unsigned int x) +unsigned char* CDECL _mbsrchr_l(const unsigned char* s, unsigned int x, _locale_t locale) { - if(get_mbcinfo()->ismbcodepage) + pthreadmbcinfo mbcinfo; + + if(!MSVCRT_CHECK_PMT(s)) + { + *_errno() = EINVAL; + return NULL; + } + + if(locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + if(mbcinfo->ismbcodepage) { unsigned int c; unsigned char* match=NULL; - if(!s) - return NULL; while (1) { - c = _mbsnextc(s); + c = _mbsnextc_l(s, locale); if (c == x) match=(unsigned char*)s; if (!c) @@ -1464,6 +1474,14 @@ unsigned char* CDECL _mbsrchr(const unsigned char* s, unsigned int x) return u_strrchr(s, x); }
+/********************************************************************* + * _mbsrchr(MSVCRT.@) + */ +unsigned char* CDECL _mbsrchr(const unsigned char* s, unsigned int x) +{ + return _mbsrchr_l(s, x, NULL); +} + /********************************************************************* * _mbstok_s_l(MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index bce48873271..fae66edf6a4 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -797,7 +797,7 @@ @ cdecl _mbspbrk(str str) # stub _mbspbrk_l(str str ptr) @ cdecl _mbsrchr(str long) -# stub _mbsrchr_l(str long ptr) +@ cdecl _mbsrchr_l(str long ptr) @ cdecl _mbsrev(str) # stub _mbsrev_l(str ptr) @ cdecl _mbsset(ptr long) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 28805ceb98f..5b4c2beb491 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -692,7 +692,7 @@ @ cdecl _mbspbrk(str str) @ stub _mbspbrk_l @ cdecl _mbsrchr(str long) -@ stub _mbsrchr_l +@ cdecl _mbsrchr_l(str long ptr) @ cdecl _mbsrev(str) @ stub _mbsrev_l @ cdecl _mbsset(ptr long) @@ -1261,7 +1261,7 @@ @ cdecl _o__mbspbrk(str str) _mbspbrk @ stub _o__mbspbrk_l @ cdecl _o__mbsrchr(str long) _mbsrchr -@ stub _o__mbsrchr_l +@ cdecl _o__mbsrchr_l(str long ptr) _mbsrchr_l @ cdecl _o__mbsrev(str) _mbsrev @ stub _o__mbsrev_l @ cdecl _o__mbsset(ptr long) _mbsset
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/console.c | 15 +++++++++++++++ dlls/msvcrt/msvcrt.spec | 2 +- 7 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index a39b15c6707..b0a4cffc9d6 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -736,7 +736,7 @@ @ cdecl _copysign(double double) copysign @ cdecl -arch=!i386 _copysignf(float float) copysignf @ varargs _cprintf(str) -@ stub _cprintf_l +@ varargs _cprintf_l(str ptr) @ stub _cprintf_p @ stub _cprintf_p_l @ stub _cprintf_s diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index a48d98455ce..660986a92f7 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1084,7 +1084,7 @@ @ cdecl _copysign(double double) copysign @ cdecl -arch=!i386 _copysignf(float float) copysignf @ varargs _cprintf(str) -@ stub _cprintf_l +@ varargs _cprintf_l(str ptr) @ stub _cprintf_p @ stub _cprintf_p_l @ stub _cprintf_s diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index b23663783a7..16bc8495882 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1076,7 +1076,7 @@ @ cdecl _copysign(double double) copysign @ cdecl _copysignf(float float) copysignf @ varargs _cprintf(str) -@ stub _cprintf_l +@ varargs _cprintf_l(str ptr) @ stub _cprintf_p @ stub _cprintf_p_l @ stub _cprintf_s diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index ec570c8ab1f..9035a39c1e7 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -400,7 +400,7 @@ @ cdecl _copysign(double double) copysign @ cdecl -arch=!i386 _copysignf(float float) copysignf @ varargs _cprintf(str) -@ stub _cprintf_l +@ varargs _cprintf_l(str ptr) @ stub _cprintf_p @ stub _cprintf_p_l @ stub _cprintf_s diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index b7d60374372..fdf5e56b5f0 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -383,7 +383,7 @@ @ cdecl _copysign(double double) copysign @ cdecl -arch=!i386 _copysignf(float float) copysignf @ varargs _cprintf(str) -@ stub _cprintf_l +@ varargs _cprintf_l(str ptr) @ stub _cprintf_p @ stub _cprintf_p_l @ stub _cprintf_s diff --git a/dlls/msvcrt/console.c b/dlls/msvcrt/console.c index 2c92f0b3811..a0ff165a5a3 100644 --- a/dlls/msvcrt/console.c +++ b/dlls/msvcrt/console.c @@ -540,6 +540,21 @@ int CDECL _vcprintf(const char* format, va_list valist) return pf_printf_a(puts_clbk_console_a, NULL, format, NULL, 0, arg_clbk_valist, NULL, &valist); }
+/********************************************************************* + * _cprintf_l (MSVCRT.@) + */ +int WINAPIV _cprintf_l(const char* format, _locale_t locale, ...) +{ + int retval; + va_list valist; + + va_start( valist, format ); + retval = _vcprintf_l(format, locale, valist); + va_end(valist); + + return retval; +} + /********************************************************************* * _cprintf (MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index fae66edf6a4..6891c5e84ed 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -370,7 +370,7 @@ @ cdecl _copysign(double double) copysign @ cdecl -arch=!i386 _copysignf(float float) copysignf @ varargs _cprintf(str) -# stub _cprintf_l(str ptr) +@ varargs _cprintf_l(str ptr) # stub _cprintf_p(str) # stub _cprintf_p_l(str ptr) # stub _cprintf_s(str)
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/console.c | 15 +++++++++++++++ dlls/msvcrt/msvcrt.spec | 2 +- 7 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index b0a4cffc9d6..f33973f856d 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -757,7 +757,7 @@ @ cdecl _ctime64_s(str long ptr) @ cdecl _cwait(ptr long long) @ varargs _cwprintf(wstr) -@ stub _cwprintf_l +@ varargs _cwprintf_l(wstr ptr) @ stub _cwprintf_p @ stub _cwprintf_p_l @ stub _cwprintf_s diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 660986a92f7..418387e1d29 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1105,7 +1105,7 @@ @ cdecl _ctime64_s(str long ptr) @ cdecl _cwait(ptr long long) @ varargs _cwprintf(wstr) -@ stub _cwprintf_l +@ varargs _cwprintf_l(wstr ptr) @ stub _cwprintf_p @ stub _cwprintf_p_l @ stub _cwprintf_s diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 16bc8495882..786f4b18caf 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1097,7 +1097,7 @@ @ cdecl _ctime64_s(str long ptr) @ cdecl _cwait(ptr long long) @ varargs _cwprintf(wstr) -@ stub _cwprintf_l +@ varargs _cwprintf_l(wstr ptr) @ stub _cwprintf_p @ stub _cwprintf_p_l @ stub _cwprintf_s diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 9035a39c1e7..cbd720580ac 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -421,7 +421,7 @@ @ cdecl _ctime64_s(str long ptr) @ cdecl _cwait(ptr long long) @ varargs _cwprintf(wstr) -@ stub _cwprintf_l +@ varargs _cwprintf_l(wstr ptr) @ stub _cwprintf_p @ stub _cwprintf_p_l @ stub _cwprintf_s diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index fdf5e56b5f0..6bdbe9ee0e9 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -404,7 +404,7 @@ @ cdecl _ctime64_s(str long ptr) @ cdecl _cwait(ptr long long) @ varargs _cwprintf(wstr) -@ stub _cwprintf_l +@ varargs _cwprintf_l(wstr ptr) @ stub _cwprintf_p @ stub _cwprintf_p_l @ stub _cwprintf_s diff --git a/dlls/msvcrt/console.c b/dlls/msvcrt/console.c index a0ff165a5a3..0e2083364ed 100644 --- a/dlls/msvcrt/console.c +++ b/dlls/msvcrt/console.c @@ -586,6 +586,21 @@ int CDECL _vcwprintf(const wchar_t* format, va_list valist) return pf_printf_w(puts_clbk_console_w, NULL, format, NULL, 0, arg_clbk_valist, NULL, &valist); }
+/********************************************************************* + * _cwprintf_l (MSVCRT.@) + */ +int WINAPIV _cwprintf_l(const wchar_t* format, _locale_t locale, ...) +{ + int retval; + va_list valist; + + va_start( valist, format ); + retval = _vcwprintf_l(format, locale, valist); + va_end(valist); + + return retval; +} + /********************************************************************* * _cwprintf (MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 6891c5e84ed..a77ed171fb1 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -393,7 +393,7 @@ @ extern _ctype MSVCRT__ctype @ cdecl _cwait(ptr long long) @ varargs _cwprintf(wstr) -# stub _cwprintf_l(wstr ptr) +@ varargs _cwprintf_l(wstr ptr) # stub _cwprintf_p(wstr) # stub _cwprintf_p_l(wstr ptr) # stub _cwprintf_s(wstr)
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 | 22 ++++++++++++++++++---- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 26 insertions(+), 12 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index f33973f856d..9659cd1f3a2 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1124,7 +1124,7 @@ @ cdecl _mbslwr_s(str long) @ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) -@ stub _mbsnbcat_l +@ cdecl _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) @ stub _mbsnbcat_s_l @ cdecl _mbsnbcmp(str str long) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 418387e1d29..4bab0eddc99 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1481,7 +1481,7 @@ @ cdecl _mbslwr_s(str long) @ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) -@ stub _mbsnbcat_l +@ cdecl _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) @ stub _mbsnbcat_s_l @ cdecl _mbsnbcmp(str str long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 786f4b18caf..e0d87f7f7f1 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1492,7 +1492,7 @@ @ cdecl _mbslwr_s(str long) @ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) -@ stub _mbsnbcat_l +@ cdecl _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) @ stub _mbsnbcat_s_l @ cdecl _mbsnbcmp(str str long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index cbd720580ac..5cc72177a33 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -796,7 +796,7 @@ @ cdecl _mbslwr_s(str long) @ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) -@ stub _mbsnbcat_l +@ cdecl _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) @ stub _mbsnbcat_s_l @ cdecl _mbsnbcmp(str str long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 6bdbe9ee0e9..556ba1fa1a7 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -774,7 +774,7 @@ @ cdecl _mbslwr_s(str long) @ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) -@ stub _mbsnbcat_l +@ cdecl _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) @ stub _mbsnbcat_s_l @ cdecl _mbsnbcmp(str str long) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 0dfd4781e31..7bf4cc2f6b5 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2189,15 +2189,21 @@ size_t CDECL _mbsnbcnt(const unsigned char* str, size_t len) }
/********************************************************************* - * _mbsnbcat(MSVCRT.@) + * _mbsnbcat_l(MSVCRT.@) */ -unsigned char* CDECL _mbsnbcat(unsigned char* dst, const unsigned char* src, size_t len) +unsigned char* CDECL _mbsnbcat_l(unsigned char* dst, const unsigned char* src, size_t len, _locale_t locale) { - if(get_mbcinfo()->ismbcodepage) + pthreadmbcinfo mbcinfo; + + if(locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + if(mbcinfo->ismbcodepage) { unsigned char *res = dst; while (*dst) { - if (_ismbblead(*dst++)) { + if (_ismbblead_l(*dst++, locale)) { if (*dst) { dst++; } else { @@ -2214,6 +2220,14 @@ unsigned char* CDECL _mbsnbcat(unsigned char* dst, const unsigned char* src, siz return u_strncat(dst, src, len); /* ASCII CP */ }
+/********************************************************************* + * _mbsnbcat(MSVCRT.@) + */ +unsigned char* CDECL _mbsnbcat(unsigned char* dst, const unsigned char* src, size_t len) +{ + return _mbsnbcat_l(dst, src, len, NULL); +} + int CDECL _mbsnbcat_s(unsigned char *dst, size_t size, const unsigned char *src, size_t len) { unsigned char *ptr = dst; diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index a77ed171fb1..e5e938959b8 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -745,7 +745,7 @@ @ cdecl _mbslwr_s(str long) @ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) -# stub _mbsnbcat_l(str str long ptr) +@ cdecl _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) # stub _mbsnbcat_s_l(str long ptr long ptr) @ cdecl _mbsnbcmp(str str long) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 5b4c2beb491..4f54e1641fc 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -640,7 +640,7 @@ @ cdecl _mbslwr_s(str long) @ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) -@ stub _mbsnbcat_l +@ cdecl _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) @ stub _mbsnbcat_s_l @ cdecl _mbsnbcmp(str str long) @@ -1209,7 +1209,7 @@ @ cdecl _o__mbslwr_s(str long) _mbslwr_s @ cdecl _o__mbslwr_s_l(str long ptr) _mbslwr_s_l @ cdecl _o__mbsnbcat(str str long) _mbsnbcat -@ stub _o__mbsnbcat_l +@ 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__mbsnbcmp(str str long) _mbsnbcmp
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=139380
Your paranoid android.
=== debian11 (build log) ===
/home/winetest/tools/testbot/var/wine-win32/../wine/dlls/msvcrt/console.c:552: undefined reference to `_vcprintf_l' collect2: error: ld returned 1 exit status Task: The win32 Wine build failed
=== debian11b (build log) ===
/home/winetest/tools/testbot/var/wine-wow64/../wine/dlls/msvcrt/console.c:552: undefined reference to `_vcprintf_l' collect2: error: ld returned 1 exit status Task: The wow64 Wine build failed