# HG changeset patch # User Kenichi Handa # Date 1036541442 0 # Node ID 1fd77c471ee638ee0aa771704bcf809bc9983536 # Parent de07830a2cc413299f2328fa7e0c40611115b924 (decode_coding_utf_8): When eol_type is Qdos, handle the case that the last byte is '\r' correctly. (decode_coding_emacs_mule): Likewise. (decode_coding_iso_2022): Likewise. (decode_coding_sjis): Likewise. (decode_coding_big5): Likewise. (decode_coding_charset): Likewise. (produce_chars): Likewise. (decode_coding): Flushing out the unprocessed data correctly. (decode_coding_gap): Set CODING_MODE_LAST_BLOCK bit of coding->mode. diff -r de07830a2cc4 -r 1fd77c471ee6 src/coding.c --- a/src/coding.c Wed Nov 06 00:10:18 2002 +0000 +++ b/src/coding.c Wed Nov 06 00:10:42 2002 +0000 @@ -1126,7 +1126,10 @@ if (EQ (eol_type, Qdos)) { if (src == src_end) - goto no_more_source; + { + coding->result = CODING_RESULT_INSUFFICIENT_SRC; + goto no_more_source; + } if (*src == '\n') ONE_MORE_BYTE (c); } @@ -1917,7 +1920,10 @@ if (EQ (eol_type, Qdos)) { if (src == src_end) - goto no_more_source; + { + coding->result = CODING_RESULT_INSUFFICIENT_SRC; + goto no_more_source; + } if (*src == '\n') ONE_MORE_BYTE (c); } @@ -2784,7 +2790,7 @@ ONE_MORE_BYTE (c1); - /* We produce no character or one character. */ + /* We produce at most one character. */ switch (iso_code_class [c1]) { case ISO_0x20_or_0x7F: @@ -2841,7 +2847,10 @@ if (EQ (eol_type, Qdos)) { if (src == src_end) - goto no_more_source; + { + coding->result = CODING_RESULT_INSUFFICIENT_SRC; + goto no_more_source; + } if (*src == '\n') ONE_MORE_BYTE (c1); } @@ -3796,7 +3805,10 @@ if (EQ (eol_type, Qdos)) { if (src == src_end) - goto no_more_source; + { + coding->result = CODING_RESULT_INSUFFICIENT_SRC; + goto no_more_source; + } if (*src == '\n') ONE_MORE_BYTE (c); } @@ -3885,7 +3897,10 @@ if (EQ (eol_type, Qdos)) { if (src == src_end) - goto no_more_source; + { + coding->result = CODING_RESULT_INSUFFICIENT_SRC; + goto no_more_source; + } if (*src == '\n') ONE_MORE_BYTE (c); } @@ -4429,8 +4444,12 @@ else. */ if (EQ (eol_type, Qdos)) { - if (src < src_end - && *src == '\n') + if (src == src_end) + { + coding->result = CODING_RESULT_INSUFFICIENT_SRC; + goto no_more_source; + } + if (*src == '\n') ONE_MORE_BYTE (c); } else if (EQ (eol_type, Qmac)) @@ -5272,8 +5291,12 @@ { if (EQ (eol_type, Qdos)) { - if (src < src_end - && *src == '\n') + if (src == src_end) + { + coding->result = CODING_RESULT_INSUFFICIENT_SRC; + goto no_more_source; + } + if (*src == '\n') c = *src++; } else if (EQ (eol_type, Qmac)) @@ -5621,12 +5644,11 @@ /* Flush out unprocessed data as binary chars. We are sure that the number of data is less than the size of coding->charbuf. */ - int *charbuf = coding->charbuf; - while (nbytes-- > 0) { int c = *src++; - *charbuf++ = (c & 0x80 ? - c : c); + + coding->charbuf[coding->charbuf_used++] = (c & 0x80 ? - c : c); } produce_chars (coding); } @@ -5883,6 +5905,7 @@ coding->dst_pos = PT; coding->dst_pos_byte = PT_BYTE; coding->dst_multibyte = ! NILP (current_buffer->enable_multibyte_characters); + coding->mode |= CODING_MODE_LAST_BLOCK; if (CODING_REQUIRE_DETECTION (coding)) detect_coding (coding);