Module: wine Branch: master Commit: fce3311843928d879e13aa14a06d3bbf0c89b9c5 URL: https://gitlab.winehq.org/wine/wine/-/commit/fce3311843928d879e13aa14a06d3bb...
Author: Bartosz Kosiorek gang65@poczta.onet.pl Date: Mon Oct 30 20:20:12 2023 +0100
msvcrt: Add _mbsdec_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 | 47 +++++++++++++++++++++++++++++++-------------- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 41 insertions(+), 22 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 37aee60487d..4f6e01ca065 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1110,7 +1110,7 @@ @ cdecl _mbscspn(str str) @ cdecl _mbscspn_l(str str ptr) @ cdecl _mbsdec(ptr ptr) -@ stub _mbsdec_l +@ cdecl _mbsdec_l(ptr ptr ptr) @ cdecl _mbsicmp(str str) @ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index d1fc7c2de55..51a68603d4f 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1467,7 +1467,7 @@ @ cdecl _mbscspn(str str) @ cdecl _mbscspn_l(str str ptr) @ cdecl _mbsdec(ptr ptr) -@ stub _mbsdec_l +@ cdecl _mbsdec_l(ptr ptr ptr) @ cdecl _mbsicmp(str str) @ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 9576cd52edb..b004a9c51d4 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1478,7 +1478,7 @@ @ cdecl _mbscspn(str str) @ cdecl _mbscspn_l(str str ptr) @ cdecl _mbsdec(ptr ptr) -@ stub _mbsdec_l +@ cdecl _mbsdec_l(ptr ptr ptr) @ cdecl _mbsicmp(str str) @ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 6c3c87ada0f..bca11a6c9c3 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -782,7 +782,7 @@ @ cdecl _mbscspn(str str) @ cdecl _mbscspn_l(str str ptr) @ cdecl _mbsdec(ptr ptr) -@ stub _mbsdec_l +@ cdecl _mbsdec_l(ptr ptr ptr) @ cdecl _mbsicmp(str str) @ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index efaef544b7d..0ead41a4f8d 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -760,7 +760,7 @@ @ cdecl _mbscspn(str str) @ cdecl _mbscspn_l(str str ptr) @ cdecl _mbsdec(ptr ptr) -@ stub _mbsdec_l +@ cdecl _mbsdec_l(ptr ptr ptr) @ cdecl _mbsicmp(str str) @ cdecl _mbsicmp_l(str str ptr) @ cdecl _mbsicoll(str str) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index c8390288d4a..4143fff50dc 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -669,20 +669,6 @@ unsigned int CDECL _mbcjmstojis(unsigned int c) return _mbcjmstojis_l(c, NULL); }
-/********************************************************************* - * _mbsdec(MSVCRT.@) - */ -unsigned char* CDECL _mbsdec(const unsigned char* start, const unsigned char* cur) -{ - if(start >= cur) - return NULL; - - if(get_mbcinfo()->ismbcodepage) - return (unsigned char *)(_ismbstrail(start,cur-1) ? cur - 2 : cur -1); - - return (unsigned char *)cur - 1; /* ASCII CP or SB char */ -} - /********************************************************************* * _mbclen_l(MSVCRT.@) */ @@ -1970,6 +1956,39 @@ int CDECL _ismbstrail(const unsigned char* start, const unsigned char* str) return _ismbstrail_l(start, str, NULL); }
+/********************************************************************* + * _mbsdec_l(MSVCRT.@) + */ +unsigned char* CDECL _mbsdec_l(const unsigned char *start, + const unsigned char *cur, _locale_t locale) +{ + pthreadmbcinfo mbcinfo; + + if (!MSVCRT_CHECK_PMT(start && cur)) + return NULL; + if (start >= cur) + return NULL; + + if (!locale) + mbcinfo = get_mbcinfo(); + else + mbcinfo = locale->mbcinfo; + + if (mbcinfo->ismbcodepage) + return (unsigned char *)(_ismbstrail_l(start, cur - 1, locale) ? cur - 2 : cur - 1); + + return (unsigned char *)cur - 1; /* ASCII CP or SB char */ +} + +/********************************************************************* + * _mbsdec(MSVCRT.@) + */ +unsigned char* CDECL _mbsdec(const unsigned char *start, const unsigned char *cur) +{ + return _mbsdec_l(start, cur, NULL); +} + + /********************************************************************* * _mbbtype_l(MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 8515f13263f..a0dbc5f8fe4 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -729,7 +729,7 @@ @ cdecl _mbscspn(str str) @ cdecl _mbscspn_l(str str ptr) @ cdecl _mbsdec(ptr ptr) -# stub _mbsdec_l(ptr ptr ptr) +@ cdecl _mbsdec_l(ptr ptr ptr) @ cdecl _mbsdup(str) _strdup # stub _strdup_dbg(str long str long) @ cdecl _mbsicmp(str str) diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index bb505b42afb..ec580948af7 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -625,7 +625,7 @@ @ cdecl _mbscspn(str str) @ cdecl _mbscspn_l(str str ptr) @ cdecl _mbsdec(ptr ptr) -@ stub _mbsdec_l +@ cdecl _mbsdec_l(ptr ptr ptr) @ cdecl _mbsdup(str) _strdup @ cdecl _mbsicmp(str str) @ cdecl _mbsicmp_l(str str ptr) @@ -1195,7 +1195,7 @@ @ cdecl _o__mbscspn(str str) _mbscspn @ cdecl _o__mbscspn_l(str str ptr) _mbscspn_l @ cdecl _o__mbsdec(ptr ptr) _mbsdec -@ stub _o__mbsdec_l +@ cdecl _o__mbsdec_l(ptr ptr ptr) _mbsdec_l @ cdecl _o__mbsicmp(str str) _mbsicmp @ cdecl _o__mbsicmp_l(str str ptr) _mbsicmp_l @ cdecl _o__mbsicoll(str str) _mbsicoll