Mercurial > emacs
changeset 23881:20d595402dea
(DECODE_DESIGNATION): Jump to label_invalid_code if
final_char is invalid.
(decode_coding): If coding->type is coding_type_ccl, call
ccl_coding_driver even if SRC_BYTES is zero.
(code_convert_region): Update `inserted' correctly after calling
coding->post_read_conversion. Even after the code converter
consumed all source text, call it once more if it is
coding_type_ccl to flush out data.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Tue, 15 Dec 1998 04:35:38 +0000 |
parents | 522ac99a666d |
children | 16d0232006fb |
files | src/coding.c |
diffstat | 1 files changed, 17 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/coding.c Tue Dec 15 04:35:38 1998 +0000 +++ b/src/coding.c Tue Dec 15 04:35:38 1998 +0000 @@ -937,9 +937,13 @@ /* Set designation state into CODING. */ #define DECODE_DESIGNATION(reg, dimension, chars, final_char) \ do { \ - int charset = ISO_CHARSET_TABLE (make_number (dimension), \ - make_number (chars), \ - make_number (final_char)); \ + int charset; \ + \ + if (final_char < '0' || final_char >= 128) \ + goto label_invalid_code; \ + charset = ISO_CHARSET_TABLE (make_number (dimension), \ + make_number (chars), \ + make_number (final_char)); \ if (charset >= 0 \ && (CODING_SPEC_ISO_REQUESTED_DESIGNATION (coding, charset) == reg \ || coding->safe_charsets[charset])) \ @@ -3694,6 +3698,7 @@ int result; if (src_bytes <= 0 + && coding->type != coding_type_ccl && ! (coding->mode & CODING_MODE_LAST_BLOCK && CODING_REQUIRE_FLUSHING (coding))) { @@ -4310,6 +4315,7 @@ move_gap_both (from, from_byte); SHRINK_CONVERSION_REGION (&from_byte, &to_byte, coding, NULL, encodep); if (from_byte == to_byte + && coding->type != coding_type_ccl && ! (coding->mode & CODING_MODE_LAST_BLOCK && CODING_REQUIRE_FLUSHING (coding))) { @@ -4452,7 +4458,13 @@ continue; } if (len_byte <= 0) - break; + { + if (coding->type != coding_type_ccl + || coding->mode & CODING_MODE_LAST_BLOCK) + break; + coding->mode |= CODING_MODE_LAST_BLOCK; + continue; + } if (result == CODING_FINISH_INSUFFICIENT_SRC) { /* The source text ends in invalid codes. Let's just @@ -4547,7 +4559,7 @@ prev_Z = Z; val = call1 (coding->post_read_conversion, make_number (inserted)); CHECK_NUMBER (val, 0); - inserted = Z - prev_Z; + inserted += Z - prev_Z; } if (orig_point >= from)