Module: wine Branch: master Commit: 3c9419622a89e2bdba5e770266d987573380119c URL: https://gitlab.winehq.org/wine/wine/-/commit/3c9419622a89e2bdba5e770266d9875...
Author: Bartosz Kosiorek gang65@poczta.onet.pl Date: Mon Oct 30 20:21:13 2023 +0100
msvcrt: Add _mbslwr_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 | 60 ++++++++++++++++++++++++++++++--------------- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 +-- 8 files changed, 48 insertions(+), 28 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 4143fff50dc..24e34b96317 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2271,30 +2271,50 @@ 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) { - unsigned char *ret = s; - if (!s) - return NULL; - if (get_mbcinfo()->ismbcodepage) - { - unsigned int c; - while (*s) + pthreadmbcinfo mbcinfo; + unsigned char *ret = s; + + if (!s) + return NULL; + + if (locale) + mbcinfo = locale->mbcinfo; + else + mbcinfo = get_mbcinfo(); + + if (mbcinfo->ismbcodepage) { - c = _mbctolower(_mbsnextc(s)); - /* Note that I assume that the size of the character is unchanged */ - if (c > 255) - { - *s++=(c>>8); - c=c & 0xff; - } - *s++=c; + unsigned int c; + + while (*s) + { + c = _mbctolower_l(_mbsnextc_l(s, locale), locale); + /* Note that I assume that the size of the character is unchanged */ + if (c > 255) + { + *s++ = (c >> 8); + c = c & 0xff; + } + *s++ = c; + } } - } - else for ( ; *s; s++) *s = _tolower_l(*s, NULL); - return ret; + 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); }
/********************************************************************* 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