Akihiro Sagawa : msvcrt: Fix wctob in C locale.
Alexandre Julliard
julliard at winehq.org
Thu Dec 1 14:05:33 CST 2011
Module: wine
Branch: master
Commit: 13aff6dc56278cd5323af0d7bee53b0ebc5a643e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=13aff6dc56278cd5323af0d7bee53b0ebc5a643e
Author: Akihiro Sagawa <sagawa.aki at 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;
}
More information about the wine-cvs
mailing list