Module: wine Branch: master Commit: 12a00363f68fd12f3a1319eba7ccbce95df4e275 URL: https://gitlab.winehq.org/wine/wine/-/commit/12a00363f68fd12f3a1319eba7ccbce...
Author: Bartosz Kosiorek gang65@poczta.onet.pl Date: Mon Nov 6 20:35:53 2023 +0100
msvcrt: Add _mbsnbset_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 | 45 +++++++++++++++++++++++++++++++-------------- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 39 insertions(+), 22 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/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 4c552a2a80f..b14ed43cb3b 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1499,7 +1499,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 e75a02e0193..2d492197452 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