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 30fbd397131..307d00e11e5 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1180,7 +1180,7 @@ @ cdecl _mbsrev(str) @ cdecl _mbsrev_l(str ptr) @ cdecl _mbsset(ptr long) -@ stub _mbsset_l +@ cdecl _mbsset_l(ptr long ptr) @ stub _mbsset_s @ stub _mbsset_s_l @ cdecl _mbsspn(str str) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index aaff43ea736..baf10ae48a4 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1537,7 +1537,7 @@ @ cdecl _mbsrev(str) @ cdecl _mbsrev_l(str ptr) @ cdecl _mbsset(ptr long) -@ stub _mbsset_l +@ cdecl _mbsset_l(ptr long ptr) @ stub _mbsset_s @ stub _mbsset_s_l @ cdecl _mbsspn(str str) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index df0ea4c24da..8fa160170d5 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1548,7 +1548,7 @@ @ cdecl _mbsrev(str) @ cdecl _mbsrev_l(str ptr) @ cdecl _mbsset(ptr long) -@ stub _mbsset_l +@ cdecl _mbsset_l(ptr long ptr) @ stub _mbsset_s @ stub _mbsset_s_l @ cdecl _mbsspn(str str) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 687a73b5d8a..9f92ba36a9f 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -852,7 +852,7 @@ @ cdecl _mbsrev(str) @ cdecl _mbsrev_l(str ptr) @ cdecl _mbsset(ptr long) -@ stub _mbsset_l +@ cdecl _mbsset_l(ptr long ptr) @ stub _mbsset_s @ stub _mbsset_s_l @ cdecl _mbsspn(str str) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 38ffcc7ca22..8d647d6e907 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -830,7 +830,7 @@ @ cdecl _mbsrev(str) @ cdecl _mbsrev_l(str ptr) @ cdecl _mbsset(ptr long) -@ stub _mbsset_l +@ cdecl _mbsset_l(ptr long ptr) @ stub _mbsset_s @ stub _mbsset_s_l @ cdecl _mbsspn(str str) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 849803aac6b..2da58575eb7 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2201,27 +2201,45 @@ int CDECL _mbsbtype(const unsigned char *str, size_t count) return _mbsbtype_l(str, count, NULL); }
+ /********************************************************************* - * _mbsset(MSVCRT.@) + * _mbsset_l(MSVCRT.@) */ -unsigned char* CDECL _mbsset(unsigned char* str, unsigned int c) +unsigned char* CDECL _mbsset_l(unsigned char* str, unsigned int c, _locale_t locale) { - unsigned char* ret = str; + unsigned char* ret = str; + pthreadmbcinfo mbcinfo;
- if(!get_mbcinfo()->ismbcodepage || c < 256) - return u__strset(str, c); /* ASCII CP or SB char */ + if (!MSVCRT_CHECK_PMT(str)) + return NULL;
- c &= 0xffff; /* Strip high bits */ + if (locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo();
- while(str[0] && str[1]) - { - *str++ = c >> 8; - *str++ = c & 0xff; - } - if(str[0]) - str[0] = '\0'; /* FIXME: OK to shorten? */ + if (!mbcinfo->ismbcodepage || c < 256) + return u__strset(str, c); /* ASCII CP or SB char */ + + c &= 0xffff; /* Strip high bits */
- return ret; + while (str[0] && str[1]) + { + *str++ = c >> 8; + *str++ = c & 0xff; + } + if (str[0]) + str[0] = '\0'; /* FIXME: OK to shorten? */ + + return ret; +} + +/********************************************************************* + * _mbsset(MSVCRT.@) + */ +unsigned char* CDECL _mbsset(unsigned char* str, unsigned int c) +{ + return _mbsset_l(str, c, NULL); }
/********************************************************************* diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index a52016e6298..11b65d869dc 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -801,7 +801,7 @@ @ cdecl _mbsrev(str) @ cdecl _mbsrev_l(str ptr) @ cdecl _mbsset(ptr long) -# stub _mbsset_l(ptr long ptr) +@ cdecl _mbsset_l(ptr long ptr) # stub _mbsset_s(ptr long long) # stub _mbsset_s_l(ptr long long ptr) @ cdecl _mbsspn(str str) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index 1f99c65ef05..4bb7f4148c7 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -696,7 +696,7 @@ @ cdecl _mbsrev(str) @ cdecl _mbsrev_l(str ptr) @ cdecl _mbsset(ptr long) -@ stub _mbsset_l +@ cdecl _mbsset_l(ptr long ptr) @ stub _mbsset_s @ stub _mbsset_s_l @ cdecl _mbsspn(str str) @@ -1265,7 +1265,7 @@ @ cdecl _o__mbsrev(str) _mbsrev @ cdecl _o__mbsrev_l(str ptr) _mbsrev_l @ cdecl _o__mbsset(ptr long) _mbsset -@ stub _o__mbsset_l +@ cdecl _o__mbsset_l(ptr long ptr) _mbsset_l @ stub _o__mbsset_s @ stub _o__mbsset_s_l @ cdecl _o__mbsspn(str str) _mbsspn