Module: wine Branch: stable Commit: cbe92403398f8bf759c75453f769a34a1fdefc8c URL: https://source.winehq.org/git/wine.git/?a=commit;h=cbe92403398f8bf759c75453f...
Author: Akihiro Sagawa sagawa.aki@gmail.com Date: Thu Jul 12 23:30:29 2018 +0900
kernel32: Fix LCMapString(LCMAP_HALFWIDTH) in some cases.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45439 Signed-off-by: Akihiro Sagawa sagawa.aki@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit a5da5252291c8df05d2f144cb3f6b9d008b4be1e) Signed-off-by: Michael Stefaniuc mstefani@winehq.org
---
dlls/kernel32/locale.c | 12 ++++-------- dlls/kernel32/tests/locale.c | 4 ++-- 2 files changed, 6 insertions(+), 10 deletions(-)
diff --git a/dlls/kernel32/locale.c b/dlls/kernel32/locale.c index 8dfbb3d..0f81097 100644 --- a/dlls/kernel32/locale.c +++ b/dlls/kernel32/locale.c @@ -3626,21 +3626,17 @@ INT WINAPI LCMapStringEx(LPCWSTR name, DWORD flags, LPCWSTR src, INT srclen, LPW { /* map full-width character to half-width one, e.g. U+30A2 -> U+FF71, U+30D7 -> U+FF8C U+FF9F. */ - if (map_to_halfwidth(wch, dst_ptr, dstlen) == 2) + if (map_to_halfwidth(wch, dst_ptr, len) == 2) { - dstlen--; + len--; dst_ptr++; - if (!dstlen) - { - SetLastError(ERROR_INSUFFICIENT_BUFFER); - return 0; - } + if (!len) break; } } else *dst_ptr = wch; } - if (!(flags & (LCMAP_UPPERCASE | LCMAP_LOWERCASE))) + if (!(flags & (LCMAP_UPPERCASE | LCMAP_LOWERCASE)) || srclen) goto done;
srclen = dst_ptr - dst; diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c index dea22df..b0231aa 100644 --- a/dlls/kernel32/tests/locale.c +++ b/dlls/kernel32/tests/locale.c @@ -2526,7 +2526,7 @@ static void test_lcmapstring_unicode(lcmapstring_wrapper func_ptr, const char *f
SetLastError(0xdeadbeef); ret = func_ptr(LCMAP_HALFWIDTH | LCMAP_UPPERCASE, buf, 2, buf2, 1); - todo_wine ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, + ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "%s should return 0 and ERROR_INSUFFICIENT_BUFFER, got %d\n", func_name, ret);
SetLastError(0xdeadbeef); @@ -2535,7 +2535,7 @@ static void test_lcmapstring_unicode(lcmapstring_wrapper func_ptr, const char *f "%s should return 0 and ERROR_INSUFFICIENT_BUFFER, got %d\n", func_name, ret);
ret = func_ptr(LCMAP_HALFWIDTH | LCMAP_UPPERCASE, buf, 2, buf2, 3); - todo_wine ok(ret == 3, "%s ret %d, expected value 3\n", func_name, ret); + ok(ret == 3, "%s ret %d, expected value 3\n", func_name, ret);
ret = func_ptr(LCMAP_HALFWIDTH | LCMAP_UPPERCASE, buf, 2, buf2, 4); ok(ret == 3, "%s ret %d, expected value 3\n", func_name, ret);