Fix decoding of emacs-mule coding system.
authorKenichi Handa <handa@m17n.org>
Thu, 25 Nov 2010 03:55:14 +0000 (12:55 +0900)
committerKenichi Handa <handa@m17n.org>
Thu, 25 Nov 2010 03:55:14 +0000 (12:55 +0900)
src/ChangeLog
src/charset.c
src/charset.h
src/coding.c
src/lread.c

index d33f9dd..7daa09c 100644 (file)
@@ -1,3 +1,19 @@
+2010-11-25  Kenichi Handa  <handa@m17n.org>
+
+       * charset.c (emacs_mule_charset): Make it an array of charset ID;
+       i.e. integer.
+       (Fdefine_charset_internal): Adjusted for the above change.
+       (init_charset_once): Likewise.
+
+       * charset.h (emacs_mule_charset): Adjust the prototype.  Delete
+       duplicated extern.
+
+       * coding.c (emacs_mule_char): Adjust for the change of
+       emacs_mule_charset.
+
+       * lread.c (read_emacs_mule_char): Adjust for the change of
+       emacs_mule_charset.
+
 2010-10-18  Ken Brown  <kbrown@cornell.edu>
 
        * s/cygwin.h (SIGNALS_VIA_CHARACTERS): New define (bug#7225).
index 3b45dc3..60203d6 100644 (file)
@@ -115,7 +115,7 @@ Lisp_Object Viso_2022_charset_list;
 /* List of emacs-mule charsets.  */
 Lisp_Object Vemacs_mule_charset_list;
 
-struct charset *emacs_mule_charset[256];
+int emacs_mule_charset[256];
 
 /* Mapping table from ISO2022's charset (specified by DIMENSION,
    CHARS, and FINAL-CHAR) to Emacs' charset.  */
@@ -1248,7 +1248,7 @@ usage: (define-charset-internal ...)  */)
 
   if (charset.emacs_mule_id >= 0)
     {
-      emacs_mule_charset[charset.emacs_mule_id] = CHARSET_FROM_ID (id);
+      emacs_mule_charset[charset.emacs_mule_id] = id;
       if (charset.emacs_mule_id < 0xA0)
        emacs_mule_bytes[charset.emacs_mule_id] = charset.dimension + 1;
       else
@@ -2405,7 +2405,7 @@ init_charset_once ()
        iso_charset_table[i][j][k] = -1;
 
   for (i = 0; i < 256; i++)
-    emacs_mule_charset[i] = NULL;
+    emacs_mule_charset[i] = -1;
 
   charset_jisx0201_roman = -1;
   charset_jisx0208_1978 = -1;
index 7188599..7afe654 100644 (file)
@@ -255,7 +255,7 @@ extern Lisp_Object Vcharset_list;
 extern Lisp_Object Viso_2022_charset_list;
 extern Lisp_Object Vemacs_mule_charset_list;
 
-extern struct charset *emacs_mule_charset[256];
+extern int emacs_mule_charset[256];
 
 extern Lisp_Object Vcurrent_iso639_language;
 
@@ -517,8 +517,6 @@ extern int iso_charset_table[ISO_MAX_DIMENSION][ISO_MAX_CHARS][ISO_MAX_FINAL];
 #define EMACS_MULE_LEADING_CODE_PRIVATE_21     0x9C /* 2/2 */
 #define EMACS_MULE_LEADING_CODE_PRIVATE_22     0x9D /* 2/2 */
 
-extern struct charset *emacs_mule_charset[256];
-
 \f
 
 extern Lisp_Object Qcharsetp;
index 137e72a..9c989e1 100644 (file)
@@ -2078,7 +2078,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
   const unsigned char *src_end = coding->source + coding->src_bytes;
   const unsigned char *src_base = src;
   int multibytep = coding->src_multibyte;
-  struct charset *charset;
+  int charset_id;
   unsigned code;
   int c;
   int consumed_chars = 0;
@@ -2088,7 +2088,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
   if (c < 0)
     {
       c = -c;
-      charset = emacs_mule_charset[0];
+      charset_id = emacs_mule_charset[0];
     }
   else
     {
@@ -2124,7 +2124,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
       switch (emacs_mule_bytes[c])
        {
        case 2:
-         if (! (charset = emacs_mule_charset[c]))
+         if ((charset_id = emacs_mule_charset[c]) < 0)
            goto invalid_code;
          ONE_MORE_BYTE (c);
          if (c < 0xA0)
@@ -2137,7 +2137,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
              || c == EMACS_MULE_LEADING_CODE_PRIVATE_12)
            {
              ONE_MORE_BYTE (c);
-             if (c < 0xA0 || ! (charset = emacs_mule_charset[c]))
+             if (c < 0xA0 || (charset_id = emacs_mule_charset[c]) < 0)
                goto invalid_code;
              ONE_MORE_BYTE (c);
              if (c < 0xA0)
@@ -2146,7 +2146,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
            }
          else
            {
-             if (! (charset = emacs_mule_charset[c]))
+             if ((charset_id = emacs_mule_charset[c]) < 0)
                goto invalid_code;
              ONE_MORE_BYTE (c);
              if (c < 0xA0)
@@ -2161,7 +2161,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
 
        case 4:
          ONE_MORE_BYTE (c);
-         if (c < 0 || ! (charset = emacs_mule_charset[c]))
+         if (c < 0 || (charset_id = emacs_mule_charset[c]) < 0)
            goto invalid_code;
          ONE_MORE_BYTE (c);
          if (c < 0xA0)
@@ -2175,21 +2175,21 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status)
 
        case 1:
          code = c;
-         charset = CHARSET_FROM_ID (ASCII_BYTE_P (code)
-                                    ? charset_ascii : charset_eight_bit);
+         charset_id = ASCII_BYTE_P (code) ? charset_ascii : charset_eight_bit;
          break;
 
        default:
          abort ();
        }
-      CODING_DECODE_CHAR (coding, src, src_base, src_end, charset, code, c);
+      CODING_DECODE_CHAR (coding, src, src_base, src_end,
+                         CHARSET_FROM_ID (charset_id), code, c);
       if (c < 0)
        goto invalid_code;
     }
   *nbytes = src - src_base;
   *nchars = consumed_chars;
   if (id)
-    *id = charset->id;
+    *id = charset_id;
   return (mseq_found ? -c : c);
 
  no_more_source:
index c96e391..13de4d0 100644 (file)
@@ -616,7 +616,7 @@ read_emacs_mule_char (c, readbyte, readcharfun)
 
   if (len == 2)
     {
-      charset = emacs_mule_charset[buf[0]];
+      charset = CHARSET_FROM_ID (emacs_mule_charset[buf[0]]);
       code = buf[1] & 0x7F;
     }
   else if (len == 3)
@@ -624,18 +624,18 @@ read_emacs_mule_char (c, readbyte, readcharfun)
       if (buf[0] == EMACS_MULE_LEADING_CODE_PRIVATE_11
          || buf[0] == EMACS_MULE_LEADING_CODE_PRIVATE_12)
        {
-         charset = emacs_mule_charset[buf[1]];
+         charset = CHARSET_FROM_ID (emacs_mule_charset[buf[1]]);
          code = buf[2] & 0x7F;
        }
       else
        {
-         charset = emacs_mule_charset[buf[0]];
+         charset = CHARSET_FROM_ID (emacs_mule_charset[buf[0]]);
          code = ((buf[1] << 8) | buf[2]) & 0x7F7F;
        }
     }
   else
     {
-      charset = emacs_mule_charset[buf[1]];
+      charset = CHARSET_FROM_ID (emacs_mule_charset[buf[1]]);
       code = ((buf[2] << 8) | buf[3]) & 0x7F7F;
     }
   c = DECODE_CHAR (charset, code);