From: Kenichi Handa Date: Wed, 29 Jan 2014 13:21:25 +0000 (+0900) Subject: Fix bug#16286 by the different way than 2014-01-26T00:32:30Z!eggert@cs.ucla.edu to... X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~242 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=52840a9cc870d3e8946b6edebe2b0a0a23d23cec;p=emacs.git Fix bug#16286 by the different way than 2014-01-26T00:32:30Z!eggert@cs.ucla.edu to preserve the code detection behavior of 24.3. --- diff --git a/src/ChangeLog b/src/ChangeLog index 4ed9ef9d2cf..aa3a65ccb60 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,16 @@ +2014-01-27 K. Handa + + Fix bug#16286 by the different way than revno:116158 to preserve + the code detection behavior of 24.3. + + * coding.h (struct coding_system): New member detected_utf8_bytes. + + * coding.c (detect_coding_utf_8): Set coding->detected_utf8_bytes. + (decode_coding_gap): Use short cut for UTF-8 file reading only + when coding->detected_utf8_bytes equals to coding->src_bytes. + + * fileio.c (Finsert_file_contents): Cancel the previous change. + 2014-01-26 Jan Djärv * xterm.c (x_focus_changed): Check for non-X terminal-frame (Bug#16540) diff --git a/src/coding.c b/src/coding.c index 01964eba4d3..654e39c0e3d 100644 --- a/src/coding.c +++ b/src/coding.c @@ -1300,6 +1300,7 @@ detect_coding_utf_8 (struct coding_system *coding, means that we found a valid non-ASCII characters. */ detect_info->found |= CATEGORY_MASK_UTF_8_AUTO | CATEGORY_MASK_UTF_8_NOSIG; } + coding->detected_utf8_bytes = src_base - coding->source; coding->detected_utf8_chars = nchars; return 1; } @@ -7890,7 +7891,7 @@ decode_coding_gap (struct coding_system *coding, coding->dst_multibyte = ! NILP (BVAR (current_buffer, enable_multibyte_characters)); coding->head_ascii = -1; - coding->detected_utf8_chars = -1; + coding->detected_utf8_bytes = coding->detected_utf8_chars = -1; coding->eol_seen = EOL_SEEN_NONE; if (CODING_REQUIRE_DETECTION (coding)) detect_coding (coding); @@ -7907,7 +7908,8 @@ decode_coding_gap (struct coding_system *coding, if (chars != bytes) { /* There exists a non-ASCII byte. */ - if (EQ (CODING_ATTR_TYPE (attrs), Qutf_8)) + if (EQ (CODING_ATTR_TYPE (attrs), Qutf_8) + && coding->detected_utf8_bytes == coding->src_bytes) { if (coding->detected_utf8_chars >= 0) chars = coding->detected_utf8_chars; diff --git a/src/coding.h b/src/coding.h index c9c19762d80..4e8b1056e43 100644 --- a/src/coding.h +++ b/src/coding.h @@ -468,7 +468,9 @@ struct coding_system the eol format. */ ptrdiff_t head_ascii; - ptrdiff_t detected_utf8_chars; + /* How many bytes/chars at the source are detected as valid utf-8 + sequence. Set by detect_coding_utf_8. */ + ptrdiff_t detected_utf8_bytes, detected_utf8_chars; /* Used internally in coding.c. See the comment of detect_ascii. */ int eol_seen; diff --git a/src/fileio.c b/src/fileio.c index 22db4602249..d03a2bcf02f 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -4298,7 +4298,6 @@ by calling `format-decode', which see. */) Z_BYTE -= inserted; ZV -= inserted; Z -= inserted; - coding.mode |= CODING_MODE_LAST_BLOCK; decode_coding_gap (&coding, inserted, inserted); inserted = coding.produced_char; coding_system = CODING_ID_NAME (coding.id);