From: Bartosz Kosiorek gang65@poczta.onet.pl
--- 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 | 25 +++++++++++++++++++++---- dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 4 ++-- 8 files changed, 29 insertions(+), 12 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..046de08c833 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -670,19 +670,36 @@ unsigned int CDECL _mbcjmstojis(unsigned int c) }
/********************************************************************* - * _mbsdec(MSVCRT.@) + * _mbsdec_l(MSVCRT.@) */ -unsigned char* CDECL _mbsdec(const unsigned char* start, const unsigned char* cur) +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 EINVAL; if(start >= cur) return NULL;
- if(get_mbcinfo()->ismbcodepage) - return (unsigned char *)(_ismbstrail(start,cur-1) ? cur - 2 : cur -1); + 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); +} + /********************************************************************* * _mbclen_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..143d7031a9e 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(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