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 | 46 ++++++++++++++++++++++++++----------- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 40 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..d77110a0eb1 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,38 @@ 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)) + 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 d77110a0eb1..fc42ec195b1 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 { @@ -2070,23 +2070,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; @@ -2176,16 +2176,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 | 28 ++++++++++++++++++++++------ dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 30 insertions(+), 14 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 fc42ec195b1..6992a4f1c58 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2270,19 +2270,27 @@ 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) + + if (!MSVCRT_CHECK_PMT(s)) 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) { @@ -2292,10 +2300,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 | 27 +++++++++++++++++++++------ dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 29 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 6992a4f1c58..d38469c7cac 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -1442,18 +1442,25 @@ 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)) + 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 +1471,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 | 17 +++++++++++++++++ dlls/msvcrt/msvcrt.spec | 2 +- 7 files changed, 23 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..6ee78c47035 100644 --- a/dlls/msvcrt/console.c +++ b/dlls/msvcrt/console.c @@ -540,6 +540,23 @@ 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); }
+#if _MSVCR_VER<=120 +/********************************************************************* + * _cprintf_l (MSVCRT.@) + */ +int WINAPIV _cprintf_l(const char* format, _locale_t locale, ...) +{ + int retval; + va_list valist; + + va_start(valist, locale); + retval = _vcprintf_l(format, locale, valist); + va_end(valist); + + return retval; +} +#endif + /********************************************************************* * _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 | 17 +++++++++++++++++ dlls/msvcrt/msvcrt.spec | 2 +- 7 files changed, 23 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 6ee78c47035..7ddb06b99a4 100644 --- a/dlls/msvcrt/console.c +++ b/dlls/msvcrt/console.c @@ -572,6 +572,7 @@ int WINAPIV _cprintf(const char* format, ...) return retval; }
+#if _MSVCR_VER<=120 /********************************************************************* * _vcwprintf_l (MSVCRT.@) */ @@ -588,6 +589,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, locale); + retval = _vcwprintf_l(format, locale, valist); + va_end(valist); + + return retval; +} + /********************************************************************* * _cwprintf (MSVCRT.@) */ @@ -602,6 +618,7 @@ int WINAPIV _cwprintf(const wchar_t* format, ...)
return retval; } +#endif
#if _MSVCR_VER>=140
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 | 24 ++++++++++++++++++++---- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 28 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 d38469c7cac..c6ad8b83cc0 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2183,15 +2183,23 @@ 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(!MSVCRT_CHECK_PMT(dst && src)) + return NULL; + 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 { @@ -2208,6 +2216,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
Piotr Caban (@piotr) commented about dlls/msvcrt/mbcs.c:
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))
There's lots of white-space inconsistency in the patch (like space after if, space before and after operator). Please fix it.
Piotr Caban (@piotr) commented about dlls/msvcrt/mbcs.c:
} else if (chartypes[charcount] & C1_LOWER) {
- mbcinfo->mbctype[i + 1] |= _SBLOW;
mbcinfo->mbctype[i + 1] |= _SBLOW;
Please avoid doing white-space only changes in code you're not touching. It's probably best to drop the patch.
Piotr Caban (@piotr) commented about dlls/msvcrt/mbcs.c:
/*********************************************************************
_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)
- if (!MSVCRT_CHECK_PMT(s))
The function is not setting errno when s is NULL on Windows.
Piotr Caban (@piotr) commented about dlls/msvcrt/mbcs.c:
}
/*********************************************************************
_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)
The function uses multiple styles (indentation, white-spaces). I think it's a good opportunity to clean it up.
Piotr Caban (@piotr) commented about dlls/msvcrt/console.c:
return pf_printf_a(puts_clbk_console_a, NULL, format, NULL, 0, arg_clbk_valist, NULL, &valist);
}
+#if _MSVCR_VER<=120 +/*********************************************************************
_cprintf_l (MSVCRT.@)
- */
+int WINAPIV _cprintf_l(const char* format, _locale_t locale, ...)
Please use 4-space indentation in new code.