Bernhard Kölbl : msvcrt: Update source pointer in wcsrtombs in C locale.

Alexandre Julliard julliard at winehq.org
Mon Jun 7 15:02:06 CDT 2021


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

Author: Bernhard Kölbl <besentv at gmail.com>
Date:   Tue Mar  2 12:09:32 2021 +0100

msvcrt: Update source pointer in wcsrtombs in C locale.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50698
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 3dca00f1dd7e8ff1abe0a15af3365b4f7c7ae042)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/msvcrt/tests/string.c | 16 ++++++++++++++++
 dlls/msvcrt/wcs.c          |  3 +++
 2 files changed, 19 insertions(+)

diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c
index 4d61cff11c0..dbc93dc93f5 100644
--- a/dlls/msvcrt/tests/string.c
+++ b/dlls/msvcrt/tests/string.c
@@ -2094,6 +2094,22 @@ static void test_mbstowcs(void)
     ok(ret == 0, "wcstombs did not return 0, got %d\n", (int)ret);
     ok(!mOut[0], "mOut = %s\n", mOut);
 
+    if(pwcsrtombs) {
+        pwstr = wSimple;
+        err = -3;
+        ret = pwcsrtombs(mOut, &pwstr, 4, &err);
+        ok(ret == 4, "wcsrtombs did not return 4\n");
+        ok(err == 0, "err = %d\n", err);
+        ok(pwstr == wSimple+4, "pwstr = %p (wszSimple = %p)\n", pwstr, wSimple);
+        ok(!memcmp(mOut, mSimple, ret), "mOut = %s\n", mOut);
+
+        pwstr = wSimple;
+        ret = pwcsrtombs(mOut, &pwstr, 5, NULL);
+        ok(ret == 4, "wcsrtombs did not return 4\n");
+        ok(pwstr == NULL, "pwstr != NULL\n");
+        ok(!memcmp(mOut, mSimple, sizeof(mSimple)), "mOut = %s\n", mOut);
+    }
+
     if(!setlocale(LC_ALL, "Japanese_Japan.932")) {
         win_skip("Japanese_Japan.932 locale not available\n");
         return;
diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c
index 9a30e0fe149..343dec70477 100644
--- a/dlls/msvcrt/wcs.c
+++ b/dlls/msvcrt/wcs.c
@@ -610,6 +610,9 @@ static size_t wcsrtombs_l(char *mbstr, const wchar_t **wcstr,
             mbstr[i] = (*wcstr)[i];
             if(!(*wcstr)[i]) break;
         }
+
+        if(i < count) *wcstr = NULL;
+        else *wcstr += i;
         return i;
     }
 




More information about the wine-cvs mailing list