Include "config.h" when HAVE_CONFIG_H is defined.
[chise/libchise.git] / chise.c
diff --git a/chise.c b/chise.c
index 4c790e1..6e8bb46 100644 (file)
--- a/chise.c
+++ b/chise.c
@@ -1,3 +1,7 @@
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
 #include "chise.h"
 
 #define xzero(lvalue) ((void) memset (&(lvalue), '\0', sizeof (lvalue)))
@@ -52,8 +56,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 +71,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 )
            {