Module: wine Branch: master Commit: 01f3beef6842d97162c1214116cd37f5f08fe015 URL: https://gitlab.winehq.org/wine/wine/-/commit/01f3beef6842d97162c1214116cd37f...
Author: Bartosz Kosiorek gang65@poczta.onet.pl Date: Tue Oct 18 18:03:23 2022 +0200
msvcrt: Add _mbslwr_s_l partial implementation.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45273
---
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 | 22 +++++++++++++++++----- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 2 +- 8 files changed, 24 insertions(+), 12 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index b3fd1af1ecb..90accd39722 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1122,7 +1122,7 @@ @ cdecl _mbslwr(str) @ stub _mbslwr_l @ cdecl _mbslwr_s(str long) -@ stub _mbslwr_s_l +@ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) @ stub _mbsnbcat_l @ cdecl _mbsnbcat_s(str long ptr long) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 28e5e047090..5ca3156ab0b 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1479,7 +1479,7 @@ @ cdecl _mbslwr(str) @ stub _mbslwr_l @ cdecl _mbslwr_s(str long) -@ stub _mbslwr_s_l +@ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) @ stub _mbsnbcat_l @ cdecl _mbsnbcat_s(str long ptr long) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index ae4874a7116..a514febaa21 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1490,7 +1490,7 @@ @ cdecl _mbslwr(str) @ stub _mbslwr_l @ cdecl _mbslwr_s(str long) -@ stub _mbslwr_s_l +@ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) @ stub _mbsnbcat_l @ cdecl _mbsnbcat_s(str long ptr long) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 7b484d8be26..9c2498781f0 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -794,7 +794,7 @@ @ cdecl _mbslwr(str) @ stub _mbslwr_l @ cdecl _mbslwr_s(str long) -@ stub _mbslwr_s_l +@ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) @ stub _mbsnbcat_l @ cdecl _mbsnbcat_s(str long ptr long) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index ab1ef139f9a..ae1add4cb5f 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -772,7 +772,7 @@ @ cdecl _mbslwr(str) @ stub _mbslwr_l @ cdecl _mbslwr_s(str long) -@ stub _mbslwr_s_l +@ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) @ stub _mbsnbcat_l @ cdecl _mbsnbcat_s(str long ptr long) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index 7073fee5bfd..b5b4309db54 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2065,11 +2065,10 @@ unsigned char* CDECL _mbslwr(unsigned char* s) return ret; }
- /********************************************************************* - * _mbslwr_s(MSVCRT.@) + * _mbslwr_s_l(MSVCRT.@) */ -int CDECL _mbslwr_s(unsigned char* s, size_t len) +int CDECL _mbslwr_s_l(unsigned char* s, size_t len, _locale_t locale) { if (!s && !len) { @@ -2080,12 +2079,13 @@ int CDECL _mbslwr_s(unsigned char* s, size_t len) *_errno() = EINVAL; return EINVAL; } + if (get_mbcinfo()->ismbcodepage) { unsigned int c; for ( ; *s && len > 0; len--) { - 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) { @@ -2095,7 +2095,12 @@ int CDECL _mbslwr_s(unsigned char* s, size_t len) *s++=c; } } - else for ( ; *s && len > 0; s++, len--) *s = _tolower_l(*s, NULL); + else + { + for ( ; *s && len > 0; s++, len--) + *s = _tolower_l(*s, locale); + } + if (*s) { *s = '\0'; @@ -2105,6 +2110,13 @@ int CDECL _mbslwr_s(unsigned char* s, size_t len) return 0; }
+/********************************************************************* + * _mbslwr_s(MSVCRT.@) + */ +int CDECL _mbslwr_s(unsigned char* str, size_t len) +{ + return _mbslwr_s_l(str, len, NULL); +}
/********************************************************************* * _mbsupr(MSVCRT.@) diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index e1b14ff2a7e..07b15ae2d98 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -743,7 +743,7 @@ @ cdecl _mbslwr(str) # stub _mbslwr_l(str ptr) @ cdecl _mbslwr_s(str long) -# stub _mbslwr_s_l(str long ptr) +@ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) # stub _mbsnbcat_l(str str long ptr) @ cdecl _mbsnbcat_s(str long ptr long) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index c803799f4cd..9d22ff00f30 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -637,7 +637,7 @@ @ cdecl _mbslwr(str) @ stub _mbslwr_l @ cdecl _mbslwr_s(str long) -@ stub _mbslwr_s_l +@ cdecl _mbslwr_s_l(str long ptr) @ cdecl _mbsnbcat(str str long) @ stub _mbsnbcat_l @ cdecl _mbsnbcat_s(str long ptr long)