Piotr Caban : msvcrt: Fix locale creation for multibyte encoding.

Alexandre Julliard julliard at winehq.org
Thu Mar 31 12:43:50 CDT 2011


Module: wine
Branch: master
Commit: 68239a620c631ef19797de7e65e6dc6603198b59
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=68239a620c631ef19797de7e65e6dc6603198b59

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu Mar 31 17:07:58 2011 +0200

msvcrt: Fix locale creation for multibyte encoding.

---

 dlls/msvcrt/locale.c |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)

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);




More information about the wine-cvs mailing list