Module: wine Branch: master Commit: b0c31c0983c4b992f5df6e0a4745d266f12e2f75 URL: https://gitlab.winehq.org/wine/wine/-/commit/b0c31c0983c4b992f5df6e0a4745d26...
Author: Bartosz Kosiorek gang65@poczta.onet.pl Date: Mon Nov 6 21:01:07 2023 +0100
msvcrt: Add _mbsnset_l implementation.
---
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, 39 insertions(+), 23 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 4f84a92d712..88558752607 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 c65a154c77d..1937ffc9efb 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -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 f8b0d238f4f..52b882a2fba 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/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index f316e4f3885..430e0f9d5af 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -791,7 +791,7 @@ @ cdecl _mbsnlen(str long) @ cdecl _mbsnlen_l(str long ptr) @ cdecl _mbsnset(ptr long long) -# stub _mbsnset_l(ptr long long ptr) +@ cdecl _mbsnset_l(ptr long long ptr) # stub _mbsnset_s(ptr long long long) # stub _mbsnset_s_l(ptr long long long ptr) @ cdecl _mbspbrk(str str) 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