Module: wine Branch: stable Commit: 08da46f08bd2793b2b54f6ec0197350d89b8b873 URL: http://source.winehq.org/git/wine.git/?a=commit;h=08da46f08bd2793b2b54f6ec01...
Author: Piotr Caban piotr@codeweavers.com Date: Mon May 16 13:29:41 2016 +0200
msvcrt: Add mbsrtowcs_s implementation.
Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit 540d969150e7ff87d731d6f4b9baa9a6f90f2737) Signed-off-by: Michael Stefaniuc mstefani@winehq.org
---
.../api-ms-win-crt-convert-l1-1-0.spec | 2 +- dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr120/msvcr120.spec | 2 +- dlls/msvcr120_app/msvcr120_app.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/mbcs.c | 29 ++++++++++++++++++++++ dlls/msvcrt/msvcrt.spec | 2 +- dlls/ucrtbase/ucrtbase.spec | 2 +- 10 files changed, 38 insertions(+), 9 deletions(-)
diff --git a/dlls/api-ms-win-crt-convert-l1-1-0/api-ms-win-crt-convert-l1-1-0.spec b/dlls/api-ms-win-crt-convert-l1-1-0/api-ms-win-crt-convert-l1-1-0.spec index f926ba8..4fe9037 100644 --- a/dlls/api-ms-win-crt-convert-l1-1-0/api-ms-win-crt-convert-l1-1-0.spec +++ b/dlls/api-ms-win-crt-convert-l1-1-0/api-ms-win-crt-convert-l1-1-0.spec @@ -88,7 +88,7 @@ @ stub mbrtoc32 @ cdecl mbrtowc(ptr str long ptr) ucrtbase.mbrtowc @ cdecl mbsrtowcs(ptr ptr long ptr) ucrtbase.mbsrtowcs -@ stub mbsrtowcs_s +@ cdecl mbsrtowcs_s(ptr ptr long ptr long ptr) ucrtbase.mbsrtowcs_s @ cdecl mbstowcs(ptr str long) ucrtbase.mbstowcs @ cdecl mbstowcs_s(ptr ptr long str long) ucrtbase.mbstowcs_s @ cdecl mbtowc(ptr str long) ucrtbase.mbtowc diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index d4cfa44..dfda3dd 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1744,7 +1744,7 @@ @ cdecl mbrlen(ptr long ptr) MSVCRT_mbrlen @ cdecl mbrtowc(ptr str long ptr) MSVCRT_mbrtowc @ cdecl mbsrtowcs(ptr ptr long ptr) MSVCRT_mbsrtowcs -@ stub mbsrtowcs_s +@ cdecl mbsrtowcs_s(ptr ptr long ptr long ptr) MSVCRT_mbsrtowcs_s @ cdecl mbstowcs(ptr str long) MSVCRT_mbstowcs @ cdecl mbstowcs_s(ptr ptr long str long) MSVCRT__mbstowcs_s @ cdecl mbtowc(ptr str long) MSVCRT_mbtowc diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index cd56cf8..aaf67ec 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -2103,7 +2103,7 @@ @ cdecl mbrlen(ptr long ptr) MSVCRT_mbrlen @ cdecl mbrtowc(ptr str long ptr) MSVCRT_mbrtowc @ cdecl mbsrtowcs(ptr ptr long ptr) MSVCRT_mbsrtowcs -@ stub mbsrtowcs_s +@ cdecl mbsrtowcs_s(ptr ptr long ptr long ptr) MSVCRT_mbsrtowcs_s @ cdecl mbstowcs(ptr str long) MSVCRT_mbstowcs @ cdecl mbstowcs_s(ptr ptr long str long) MSVCRT__mbstowcs_s @ cdecl mbtowc(ptr str long) MSVCRT_mbtowc diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 4c0e95a..8159f0a 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -2280,7 +2280,7 @@ @ cdecl mbrlen(ptr long ptr) MSVCRT_mbrlen @ cdecl mbrtowc(ptr str long ptr) MSVCRT_mbrtowc @ cdecl mbsrtowcs(ptr ptr long ptr) MSVCRT_mbsrtowcs -@ stub mbsrtowcs_s +@ cdecl mbsrtowcs_s(ptr ptr long ptr long ptr) MSVCRT_mbsrtowcs_s @ cdecl mbstowcs(ptr str long) MSVCRT_mbstowcs @ cdecl mbstowcs_s(ptr ptr long str long) MSVCRT__mbstowcs_s @ cdecl mbtowc(ptr str long) MSVCRT_mbtowc diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec index d7979d6..5087e9c 100644 --- a/dlls/msvcr120_app/msvcr120_app.spec +++ b/dlls/msvcr120_app/msvcr120_app.spec @@ -1943,7 +1943,7 @@ @ cdecl mbrlen(ptr long ptr) msvcr120.mbrlen @ cdecl mbrtowc(ptr str long ptr) msvcr120.mbrtowc @ cdecl mbsrtowcs(ptr ptr long ptr) msvcr120.mbsrtowcs -@ stub mbsrtowcs_s +@ cdecl mbsrtowcs_s(ptr ptr long ptr long ptr) msvcr120.mbsrtowcs_s @ cdecl mbstowcs(ptr str long) msvcr120.mbstowcs @ cdecl mbstowcs_s(ptr ptr long str long) msvcr120.mbstowcs_s @ cdecl mbtowc(ptr str long) msvcr120.mbtowc diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 4def939..2611bcc 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1425,7 +1425,7 @@ @ cdecl mbrlen(ptr long ptr) MSVCRT_mbrlen @ cdecl mbrtowc(ptr str long ptr) MSVCRT_mbrtowc @ cdecl mbsrtowcs(ptr ptr long ptr) MSVCRT_mbsrtowcs -@ stub mbsrtowcs_s +@ cdecl mbsrtowcs_s(ptr ptr long ptr long ptr) MSVCRT_mbsrtowcs_s @ cdecl mbstowcs(ptr str long) MSVCRT_mbstowcs @ cdecl mbstowcs_s(ptr ptr long str long) MSVCRT__mbstowcs_s @ cdecl mbtowc(ptr str long) MSVCRT_mbtowc diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 752db52..45e1d6b 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1397,7 +1397,7 @@ @ cdecl mbrlen(ptr long ptr) MSVCRT_mbrlen @ cdecl mbrtowc(ptr str long ptr) MSVCRT_mbrtowc @ cdecl mbsrtowcs(ptr ptr long ptr) MSVCRT_mbsrtowcs -@ stub mbsrtowcs_s +@ cdecl mbsrtowcs_s(ptr ptr long ptr long ptr) MSVCRT_mbsrtowcs_s @ cdecl mbstowcs(ptr str long) MSVCRT_mbstowcs @ cdecl mbstowcs_s(ptr ptr long str long) MSVCRT__mbstowcs_s @ cdecl mbtowc(ptr str long) MSVCRT_mbtowc diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index e7adaad..c206af1 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2357,6 +2357,35 @@ MSVCRT_size_t CDECL MSVCRT_mbsrtowcs(MSVCRT_wchar_t *wcstr, }
/********************************************************************* + * mbsrtowcs_s(MSVCRT.@) + */ +int CDECL MSVCRT_mbsrtowcs_s(MSVCRT_size_t *ret, MSVCRT_wchar_t *wcstr, MSVCRT_size_t len, + const char **mbstr, MSVCRT_size_t count, MSVCRT_mbstate_t *state) +{ + MSVCRT_size_t tmp; + + if(!ret) ret = &tmp; + if(!MSVCRT_CHECK_PMT(!!wcstr == !!len)) { + *ret = -1; + return MSVCRT_EINVAL; + } + + *ret = MSVCRT_mbsrtowcs(wcstr, mbstr, count>len ? len : count, state); + if(*ret == -1) { + if(wcstr) *wcstr = 0; + return *MSVCRT__errno(); + } + (*ret)++; + if(*ret > len) { + /* no place for terminating '\0' */ + if(wcstr) *wcstr = 0; + return 0; + } + if(wcstr) wcstr[(*ret)-1] = 0; + return 0; +} + +/********************************************************************* * _mbctohira (MSVCRT.@) * * Converts a sjis katakana character to hiragana. diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index ca1c97f..fb64163 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1365,7 +1365,7 @@ @ cdecl mbrtowc(ptr str long ptr) MSVCRT_mbrtowc # stub mbsdup_dbg(wstr long ptr long) @ cdecl mbsrtowcs(ptr ptr long ptr) MSVCRT_mbsrtowcs -# stub mbsrtowcs_s(ptr ptr long ptr long ptr) +@ cdecl mbsrtowcs_s(ptr ptr long ptr long ptr) MSVCRT_mbsrtowcs_s @ cdecl mbstowcs(ptr str long) MSVCRT_mbstowcs @ cdecl mbstowcs_s(ptr ptr long str long) MSVCRT__mbstowcs_s @ cdecl mbtowc(ptr str long) MSVCRT_mbtowc diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec index bbae921..c4c6510 100644 --- a/dlls/ucrtbase/ucrtbase.spec +++ b/dlls/ucrtbase/ucrtbase.spec @@ -2415,7 +2415,7 @@ @ stub mbrtoc32 @ cdecl mbrtowc(ptr str long ptr) MSVCRT_mbrtowc @ cdecl mbsrtowcs(ptr ptr long ptr) MSVCRT_mbsrtowcs -@ stub mbsrtowcs_s +@ cdecl mbsrtowcs_s(ptr ptr long ptr long ptr) MSVCRT_mbsrtowcs_s @ cdecl mbstowcs(ptr str long) MSVCRT_mbstowcs @ cdecl mbstowcs_s(ptr ptr long str long) MSVCRT__mbstowcs_s @ cdecl mbtowc(ptr str long) MSVCRT_mbtowc