(chise_dt_get_char): Use `chise_value_data' instead of
authortomo <tomo>
Wed, 12 Mar 2003 12:41:44 +0000 (12:41 +0000)
committertomo <tomo>
Wed, 12 Mar 2003 12:41:44 +0000 (12:41 +0000)
`chise_value_to_c_string'; use `strnlen' and `chise_value_size'
instead of `strlen'; fix problem about control characters.

chise.c

diff --git a/chise.c b/chise.c
index 4c790e1..04b5041 100644 (file)
--- a/chise.c
+++ b/chise.c
@@ -52,8 +52,8 @@ chise_dt_get_char (CHISE_Decoding_Table *db, int code_point)
   if (!status)
     {
       unsigned char *str
-       = (unsigned char *)chise_value_to_c_string (&valdatum);
-      int len = strlen (str);
+       = (unsigned char *)chise_value_data (&valdatum);
+      int len = strnlen (str, chise_value_size (&valdatum));
       int i = 0;
 
       if ( (len >= 2) && (str[i++] == '?') )
@@ -67,6 +67,16 @@ chise_dt_get_char (CHISE_Decoding_Table *db, int code_point)
              if (len < 3)
                return -1;
              c = str[i++];
+             if (c == '^')
+               {
+                 if (len < 4)
+                   return -1;
+                 c = str[i++];
+                 if (c == '?')
+                   return 0x7F;
+                 else
+                   return c & (0x80 | 0x1F);
+               }
            }
          if ( c < 0xC0 )
            {