From c0ce611ebd3684dcc59fb4803dbd0fa2af87bf73 Mon Sep 17 00:00:00 2001 From: Piotr Caban <piotr@codeweavers.com> Date: Thu, 29 Nov 2012 21:49:42 +0000 Subject: [PATCH] msvcrt: Added wcrtomb implementation. --- dlls/msvcrt/msvcrt.spec | 2 +- dlls/msvcrt/wcs.c | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 6a888320fb9..ecf44fd06d8 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1445,7 +1445,7 @@ @ cdecl vswprintf_s(ptr long wstr ptr) MSVCRT_vswprintf_s @ cdecl vwprintf(wstr ptr) MSVCRT_vwprintf @ cdecl vwprintf_s(wstr ptr) MSVCRT_vwprintf_s -# stub wcrtomb(ptr long ptr) +@ cdecl wcrtomb(ptr long ptr) MSVCRT_wcrtomb # stub wcrtomb_s(ptr ptr long long ptr) @ cdecl wcscat(wstr wstr) ntdll.wcscat @ cdecl wcscat_s(wstr long wstr) MSVCRT_wcscat_s diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index 08628d4bd77..555e63a1e2e 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -1083,7 +1083,25 @@ INT CDECL MSVCRT_wctob( MSVCRT_wint_t wchar ) */ INT CDECL MSVCRT_wctomb( char *dst, MSVCRT_wchar_t ch ) { - return WideCharToMultiByte( get_locinfo()->lc_codepage, 0, &ch, 1, dst, 6, NULL, NULL ); + BOOL error; + INT size; + + size = WideCharToMultiByte(get_locinfo()->lc_codepage, 0, &ch, 1, dst, dst ? 6 : 0, NULL, &error); + if(!size || error) { + *MSVCRT__errno() = MSVCRT_EINVAL; + return MSVCRT_EOF; + } + return size; +} + +/********************************************************************* + * wcrtomb (MSVCRT.@) + */ +MSVCRT_size_t CDECL MSVCRT_wcrtomb( char *dst, MSVCRT_wchar_t ch, MSVCRT_mbstate_t *s) +{ + if(s) + *s = 0; + return MSVCRT_wctomb(dst, ch); } /********************************************************************* -- GitLab