[prev in list] [next in list] [prev in thread] [next in thread]
List: wine-patches
Subject: msvcrt: Fix locale creation for multibyte encoding (try3)
From: Piotr Caban <piotr () codeweavers ! com>
Date: 2011-03-31 15:07:58
Message-ID: 4D9498CE.2070000 () codeweavers ! com
[Download RAW message or body]
try2:
- use LCMapStringA on whole buffer
- set _LEADBYTE flag
try3:
- C1_DEFINED flag is set by GetStringTypeA, no need to set/remove it
---
dlls/msvcrt/locale.c | 15 ++++++++++++---
1 files changed, 12 insertions(+), 3 deletions(-)
["0001-msvcrt-Fix-locale-creation-for-multibyte-encoding.txt" (text/x-patch)]
diff --git a/dlls/msvcrt/locale.c b/dlls/msvcrt/locale.c
index 2f2be43..7da61d8 100644
--- a/dlls/msvcrt/locale.c
+++ b/dlls/msvcrt/locale.c
@@ -746,6 +746,7 @@ MSVCRT__locale_t MSVCRT__create_locale(int category, const char *locale)
if(lcid[MSVCRT_LC_CTYPE] && (category==MSVCRT_LC_ALL || category==MSVCRT_LC_CTYPE)) {
CPINFO cp;
+ int j;
if(update_threadlocinfo_category(lcid[MSVCRT_LC_CTYPE], loc, MSVCRT_LC_CTYPE)) {
MSVCRT__free_locale(loc);
@@ -778,8 +779,11 @@ MSVCRT__locale_t MSVCRT__create_locale(int category, const char *locale)
GetStringTypeA(lcid[MSVCRT_LC_CTYPE], CT_CTYPE1, buf,
1, loc->locinfo->ctype1+i);
- loc->locinfo->ctype1[i] |= 0x200;
}
+
+ for(i=0; cp.LeadByte[i+1]!=0; i+=2)
+ for(j=cp.LeadByte[i]; j<=cp.LeadByte[i+1]; j++)
+ loc->locinfo->ctype1[j+1] |= MSVCRT__LEADBYTE;
} else {
loc->locinfo->lc_clike = 1;
loc->locinfo->mb_cur_max = 1;
@@ -787,8 +791,13 @@ MSVCRT__locale_t MSVCRT__create_locale(int category, const char *locale)
loc->locinfo->lc_category[MSVCRT_LC_CTYPE].locale = _strdup("C");
}
- for(i=0; i<256; i++)
- buf[i] = i;
+ for(i=0; i<256; i++) {
+ if(loc->locinfo->pctype[i] & MSVCRT__LEADBYTE)
+ buf[i] = ' ';
+ else
+ buf[i] = i;
+
+ }
LCMapStringA(lcid[MSVCRT_LC_CTYPE], LCMAP_LOWERCASE, buf, 256,
(char*)loc->locinfo->pclmap, 256);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic