Akihiro Sagawa : msvcrt: Fix mbstowcs with empty strings.

Alexandre Julliard julliard at winehq.org
Tue Jan 2 15:01:23 CST 2018


Module: wine
Branch: stable
Commit: ed6635099832d35c7423db88361173bf1f80a368
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=ed6635099832d35c7423db88361173bf1f80a368

Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date:   Fri Aug  4 23:06:39 2017 +0900

msvcrt: Fix mbstowcs with empty strings.

Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 967fb744e4af99b61e6af9a7c2ddde4640b54ebf)
Signed-off-by: Michael Stefaniuc <mstefani at 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);




More information about the wine-cvs mailing list