Module: wine Branch: stable Commit: 3224e39044106b56dfbc197ccfeeab65ba853080 URL: https://source.winehq.org/git/wine.git/?a=commit;h=3224e39044106b56dfbc197cc...
Author: Bernhard Kölbl besentv@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit 3dca00f1dd7e8ff1abe0a15af3365b4f7c7ae042) Signed-off-by: Michael Stefaniuc mstefani@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; }