From: Kenichi Handa Date: Fri, 26 Jan 2001 06:10:21 +0000 (+0000) Subject: (decode_coding): Set a flag for inhibiting X-Git-Tag: emacs-pretest-21.0.96~61 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=8844fa83d302c082faf9976fa3253709afda0d2c;p=emacs.git (decode_coding): Set a flag for inhibiting inconsistent eol. (code_convert_region): Always set saved_coding_symbol. (decode_coding_string): Likewise. Update coding->symbol when we encounter a inconsistent eol by the same way as code_convert_region. --- diff --git a/src/coding.c b/src/coding.c index 08b8935e056..250977eb5f2 100644 --- a/src/coding.c +++ b/src/coding.c @@ -4679,7 +4679,12 @@ decode_coding (coding, source, destination, src_bytes, dst_bytes) if (coding->eol_type == CODING_EOL_UNDECIDED && coding->type != coding_type_ccl) - detect_eol (coding, source, src_bytes); + { + detect_eol (coding, source, src_bytes); + /* We had better recover the original eol format if we + encounter an inconsitent eol format while decoding. */ + coding->mode |= CODING_MODE_INHIBIT_INCONSISTENT_EOL; + } coding->produced = coding->produced_char = 0; coding->consumed = coding->consumed_char = 0; @@ -5304,7 +5309,7 @@ code_convert_region (from, from_byte, to, to_byte, coding, encodep, replace) int multibyte_p = !NILP (current_buffer->enable_multibyte_characters); deletion = Qnil; - saved_coding_symbol = Qnil; + saved_coding_symbol = coding->symbol; if (from < PT && PT < to) { @@ -5356,7 +5361,6 @@ code_convert_region (from, from_byte, to, to_byte, coding, encodep, replace) if (coding->eol_type == CODING_EOL_UNDECIDED && coding->type != coding_type_ccl) { - saved_coding_symbol = coding->symbol; detect_eol (coding, BYTE_POS_ADDR (from_byte), len_byte); if (coding->eol_type == CODING_EOL_UNDECIDED) coding->eol_type = CODING_EOL_LF; @@ -5794,7 +5798,7 @@ decode_coding_string (str, coding, nocopy) from = 0; to_byte = STRING_BYTES (XSTRING (str)); - saved_coding_symbol = Qnil; + saved_coding_symbol = coding->symbol; coding->src_multibyte = STRING_MULTIBYTE (str); coding->dst_multibyte = 1; if (CODING_REQUIRE_DETECTION (coding)) @@ -5883,6 +5887,8 @@ decode_coding_string (str, coding, nocopy) extend_conversion_buffer (&buf); else if (result == CODING_FINISH_INCONSISTENT_EOL) { + Lisp_Object eol_type; + /* Recover the original EOL format. */ if (coding->eol_type == CODING_EOL_CR) { @@ -5906,8 +5912,19 @@ decode_coding_string (str, coding, nocopy) produced += num_eol; produced_char += num_eol; } + /* Suppress eol-format conversion in the further conversion. */ coding->eol_type = CODING_EOL_LF; - coding->symbol = saved_coding_symbol; + + /* Set the coding system symbol to that for Unix-like EOL. */ + eol_type = Fget (saved_coding_symbol, Qeol_type); + if (VECTORP (eol_type) + && XVECTOR (eol_type)->size == 3 + && SYMBOLP (XVECTOR (eol_type)->contents[CODING_EOL_LF])) + coding->symbol = XVECTOR (eol_type)->contents[CODING_EOL_LF]; + else + coding->symbol = saved_coding_symbol; + + } }