(chise_dt_get_char): Fix problem about `?\CHAR'.
authortomo <tomo>
Tue, 11 Mar 2003 00:43:36 +0000 (00:43 +0000)
committertomo <tomo>
Tue, 11 Mar 2003 00:43:36 +0000 (00:43 +0000)
chise.c

diff --git a/chise.c b/chise.c
index ea6f086..4c790e1 100644 (file)
--- a/chise.c
+++ b/chise.c
@@ -54,14 +54,20 @@ chise_dt_get_char (CHISE_Decoding_Table *db, int code_point)
       unsigned char *str
        = (unsigned char *)chise_value_to_c_string (&valdatum);
       int len = strlen (str);
-      int i;
+      int i = 0;
 
-      if ( (len >= 2) && (str[0] == '?') )
+      if ( (len >= 2) && (str[i++] == '?') )
        {
-         unsigned char c = str[1];
+         unsigned char c = str[i++];
          int counter;
          CHISE_Char_ID cid;
 
+         if (c == '\\')
+           {
+             if (len < 3)
+               return -1;
+             c = str[i++];
+           }
          if ( c < 0xC0 )
            {
              cid = c;
@@ -95,10 +101,10 @@ chise_dt_get_char (CHISE_Decoding_Table *db, int code_point)
 
          if (counter + 2 <= len)
            {
-             int i;
+             int j;
 
-             for (i = 0; i < counter; i++)
-               cid = (cid << 6) | (str[i + 2] & 0x3F);
+             for (j = 0; j < counter; j++)
+               cid = (cid << 6) | (str[j + i] & 0x3F);
              return cid;
            }
        }