Akihiro Sagawa : msvcrt: Fix mbstowcs with empty strings.
Module: wine Branch: stable Commit: ed6635099832d35c7423db88361173bf1f80a368 URL: https://source.winehq.org/git/wine.git/?a=commit;h=ed6635099832d35c7423db883... Author: Akihiro Sagawa <sagawa.aki(a)gmail.com> Date: Fri Aug 4 23:06:39 2017 +0900 msvcrt: Fix mbstowcs with empty strings. Signed-off-by: Akihiro Sagawa <sagawa.aki(a)gmail.com> Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> (cherry picked from commit 967fb744e4af99b61e6af9a7c2ddde4640b54ebf) Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- dlls/msvcrt/mbcs.c | 14 ++++++++------ dlls/msvcrt/tests/string.c | 6 +++--- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index aabbf7a..63be805 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2278,12 +2278,14 @@ MSVCRT_size_t CDECL MSVCRT__mbstowcs_l(MSVCRT_wchar_t *wcstr, const char *mbstr, size += (MSVCRT__isleadbyte_l((unsigned char)mbstr[size], locale) ? 2 : 1); } - size = MultiByteToWideChar(locinfo->lc_codepage, 0, - mbstr, size, wcstr, count); - if(!size) { - if(count) wcstr[0] = '\0'; - *MSVCRT__errno() = MSVCRT_EILSEQ; - return -1; + if(size) { + size = MultiByteToWideChar(locinfo->lc_codepage, 0, + mbstr, size, wcstr, count); + if(!size) { + if(count) wcstr[0] = '\0'; + *MSVCRT__errno() = MSVCRT_EILSEQ; + return -1; + } } if(size<count && wcstr) diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c index 58e19a9..7557996 100644 --- a/dlls/msvcrt/tests/string.c +++ b/dlls/msvcrt/tests/string.c @@ -1900,7 +1900,7 @@ static void test_mbstowcs(void) ok(!memcmp(wOut, wHiragana, sizeof(wHiragana)), "wOut = %s\n", wine_dbgstr_w(wOut)); ret = mbstowcs(wOut, mEmpty, 6); - todo_wine ok(ret == 0, "mbstowcs did not return 0, got %d\n", (int)ret); + ok(ret == 0, "mbstowcs did not return 0, got %d\n", (int)ret); ok(!memcmp(wOut, wEmpty, sizeof(wEmpty)), "wOut = %s\n", wine_dbgstr_w(wOut)); ret = wcstombs(mOut, wHiragana, 6); @@ -1928,8 +1928,8 @@ static void test_mbstowcs(void) ok(!memcmp(wOut, wHiragana, sizeof(wHiragana)), "wOut = %s\n", wine_dbgstr_w(wOut)); err = pmbstowcs_s(&ret, wOut, 6, mEmpty, _TRUNCATE); - todo_wine ok(err == 0, "err = %d\n", err); - todo_wine ok(ret == 1, "mbstowcs_s did not return 1, got %d\n", (int)ret); + ok(err == 0, "err = %d\n", err); + ok(ret == 1, "mbstowcs_s did not return 1, got %d\n", (int)ret); ok(!memcmp(wOut, wEmpty, sizeof(wEmpty)), "wOut = %s\n", wine_dbgstr_w(wOut)); err = pmbstowcs_s(&ret, NULL, 0, mHiragana, 1);
participants (1)
-
Alexandre Julliard