Module: wine Branch: master Commit: 967fb744e4af99b61e6af9a7c2ddde4640b54ebf URL: http://source.winehq.org/git/wine.git/?a=commit;h=967fb744e4af99b61e6af9a7c2...
Author: Akihiro Sagawa sagawa.aki@gmail.com Date: Fri Aug 4 23:06:39 2017 +0900
msvcrt: Fix mbstowcs with empty strings.
Signed-off-by: Akihiro Sagawa sagawa.aki@gmail.com Signed-off-by: Piotr Caban piotr@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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 93bb1a7..49d6678 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 87e387a..8de2f43 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);