Module: wine Branch: master Commit: 13aff6dc56278cd5323af0d7bee53b0ebc5a643e URL: http://source.winehq.org/git/wine.git/?a=commit;h=13aff6dc56278cd5323af0d7be...
Author: Akihiro Sagawa sagawa.aki@gmail.com Date: Wed Nov 30 22:34:13 2011 +0900
msvcrt: Fix wctob in C locale.
---
dlls/msvcrt/tests/string.c | 3 +++ dlls/msvcrt/wcs.c | 10 ++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c index 5fe69cf..c923684 100644 --- a/dlls/msvcrt/tests/string.c +++ b/dlls/msvcrt/tests/string.c @@ -2002,6 +2002,9 @@ static void test_wctob(void) ret = p_wctob(0x81); ok(ret == (int)(char)0x81, "ret = %x\n", ret);
+ ret = p_wctob(0x9f); + ok(ret == (int)(char)0x9f, "ret = %x\n", ret); + ret = p_wctob(0xe0); ok(ret == (int)(char)0xe0, "ret = %x\n", ret); } diff --git a/dlls/msvcrt/wcs.c b/dlls/msvcrt/wcs.c index 1a685de..17ff532 100644 --- a/dlls/msvcrt/wcs.c +++ b/dlls/msvcrt/wcs.c @@ -1056,8 +1056,14 @@ INT CDECL MSVCRT_wctob( MSVCRT_wint_t wchar ) { char out; BOOL error; + UINT codepage = get_locinfo()->lc_codepage;
- if(WideCharToMultiByte( get_locinfo()->lc_codepage, 0, &wchar, 1, &out, 1, NULL, &error ) && !error) + if(!codepage) { + if (wchar < 0xff) + return (signed char)wchar; + else + return MSVCRT_EOF; + } else if(WideCharToMultiByte( codepage, 0, &wchar, 1, &out, 1, NULL, &error ) && !error) return (INT)out; return MSVCRT_EOF; }