diff options
| author | Kenichi Handa | 2010-11-25 12:55:14 +0900 |
|---|---|---|
| committer | Kenichi Handa | 2010-11-25 12:55:14 +0900 |
| commit | b84ae584330c940010bc543fd925eddeb13fd9e2 (patch) | |
| tree | c0a1ef38fd720674080b3ef1fc8e5f3cad6e7145 /src/coding.c | |
| parent | cf5314c93a722b73cbf0f3607bea152d79c3df7b (diff) | |
| download | emacs-b84ae584330c940010bc543fd925eddeb13fd9e2.tar.gz emacs-b84ae584330c940010bc543fd925eddeb13fd9e2.zip | |
Fix decoding of emacs-mule coding system.
Diffstat (limited to 'src/coding.c')
| -rw-r--r-- | src/coding.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/coding.c b/src/coding.c index 137e72a0ba4..9c989e1c39e 100644 --- a/src/coding.c +++ b/src/coding.c | |||
| @@ -2078,7 +2078,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status) | |||
| 2078 | const unsigned char *src_end = coding->source + coding->src_bytes; | 2078 | const unsigned char *src_end = coding->source + coding->src_bytes; |
| 2079 | const unsigned char *src_base = src; | 2079 | const unsigned char *src_base = src; |
| 2080 | int multibytep = coding->src_multibyte; | 2080 | int multibytep = coding->src_multibyte; |
| 2081 | struct charset *charset; | 2081 | int charset_id; |
| 2082 | unsigned code; | 2082 | unsigned code; |
| 2083 | int c; | 2083 | int c; |
| 2084 | int consumed_chars = 0; | 2084 | int consumed_chars = 0; |
| @@ -2088,7 +2088,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status) | |||
| 2088 | if (c < 0) | 2088 | if (c < 0) |
| 2089 | { | 2089 | { |
| 2090 | c = -c; | 2090 | c = -c; |
| 2091 | charset = emacs_mule_charset[0]; | 2091 | charset_id = emacs_mule_charset[0]; |
| 2092 | } | 2092 | } |
| 2093 | else | 2093 | else |
| 2094 | { | 2094 | { |
| @@ -2124,7 +2124,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status) | |||
| 2124 | switch (emacs_mule_bytes[c]) | 2124 | switch (emacs_mule_bytes[c]) |
| 2125 | { | 2125 | { |
| 2126 | case 2: | 2126 | case 2: |
| 2127 | if (! (charset = emacs_mule_charset[c])) | 2127 | if ((charset_id = emacs_mule_charset[c]) < 0) |
| 2128 | goto invalid_code; | 2128 | goto invalid_code; |
| 2129 | ONE_MORE_BYTE (c); | 2129 | ONE_MORE_BYTE (c); |
| 2130 | if (c < 0xA0) | 2130 | if (c < 0xA0) |
| @@ -2137,7 +2137,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status) | |||
| 2137 | || c == EMACS_MULE_LEADING_CODE_PRIVATE_12) | 2137 | || c == EMACS_MULE_LEADING_CODE_PRIVATE_12) |
| 2138 | { | 2138 | { |
| 2139 | ONE_MORE_BYTE (c); | 2139 | ONE_MORE_BYTE (c); |
| 2140 | if (c < 0xA0 || ! (charset = emacs_mule_charset[c])) | 2140 | if (c < 0xA0 || (charset_id = emacs_mule_charset[c]) < 0) |
| 2141 | goto invalid_code; | 2141 | goto invalid_code; |
| 2142 | ONE_MORE_BYTE (c); | 2142 | ONE_MORE_BYTE (c); |
| 2143 | if (c < 0xA0) | 2143 | if (c < 0xA0) |
| @@ -2146,7 +2146,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status) | |||
| 2146 | } | 2146 | } |
| 2147 | else | 2147 | else |
| 2148 | { | 2148 | { |
| 2149 | if (! (charset = emacs_mule_charset[c])) | 2149 | if ((charset_id = emacs_mule_charset[c]) < 0) |
| 2150 | goto invalid_code; | 2150 | goto invalid_code; |
| 2151 | ONE_MORE_BYTE (c); | 2151 | ONE_MORE_BYTE (c); |
| 2152 | if (c < 0xA0) | 2152 | if (c < 0xA0) |
| @@ -2161,7 +2161,7 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status) | |||
| 2161 | 2161 | ||
| 2162 | case 4: | 2162 | case 4: |
| 2163 | ONE_MORE_BYTE (c); | 2163 | ONE_MORE_BYTE (c); |
| 2164 | if (c < 0 || ! (charset = emacs_mule_charset[c])) | 2164 | if (c < 0 || (charset_id = emacs_mule_charset[c]) < 0) |
| 2165 | goto invalid_code; | 2165 | goto invalid_code; |
| 2166 | ONE_MORE_BYTE (c); | 2166 | ONE_MORE_BYTE (c); |
| 2167 | if (c < 0xA0) | 2167 | if (c < 0xA0) |
| @@ -2175,21 +2175,21 @@ emacs_mule_char (coding, src, nbytes, nchars, id, cmp_status) | |||
| 2175 | 2175 | ||
| 2176 | case 1: | 2176 | case 1: |
| 2177 | code = c; | 2177 | code = c; |
| 2178 | charset = CHARSET_FROM_ID (ASCII_BYTE_P (code) | 2178 | charset_id = ASCII_BYTE_P (code) ? charset_ascii : charset_eight_bit; |
| 2179 | ? charset_ascii : charset_eight_bit); | ||
| 2180 | break; | 2179 | break; |
| 2181 | 2180 | ||
| 2182 | default: | 2181 | default: |
| 2183 | abort (); | 2182 | abort (); |
| 2184 | } | 2183 | } |
| 2185 | CODING_DECODE_CHAR (coding, src, src_base, src_end, charset, code, c); | 2184 | CODING_DECODE_CHAR (coding, src, src_base, src_end, |
| 2185 | CHARSET_FROM_ID (charset_id), code, c); | ||
| 2186 | if (c < 0) | 2186 | if (c < 0) |
| 2187 | goto invalid_code; | 2187 | goto invalid_code; |
| 2188 | } | 2188 | } |
| 2189 | *nbytes = src - src_base; | 2189 | *nbytes = src - src_base; |
| 2190 | *nchars = consumed_chars; | 2190 | *nchars = consumed_chars; |
| 2191 | if (id) | 2191 | if (id) |
| 2192 | *id = charset->id; | 2192 | *id = charset_id; |
| 2193 | return (mseq_found ? -c : c); | 2193 | return (mseq_found ? -c : c); |
| 2194 | 2194 | ||
| 2195 | no_more_source: | 2195 | no_more_source: |