summaryrefslogtreecommitdiff
path: root/src/coding.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2013-11-18 18:45:48 +0200
committerEli Zaretskii <eliz@gnu.org>2013-11-18 18:45:48 +0200
commit18b35e2c7a3ff95fb4a07e58c3f57c70c65c0701 (patch)
tree7a837a755a7c22d3258408cb384d01479ad88232 /src/coding.c
parentdf87c56cdf6c8c13e8760bdc409e2eb0fda55b0b (diff)
parent37c790b38599cc80a16c6a76152abbf8160fe2a1 (diff)
downloademacs-18b35e2c7a3ff95fb4a07e58c3f57c70c65c0701.tar.gz
emacs-18b35e2c7a3ff95fb4a07e58c3f57c70c65c0701.tar.bz2
emacs-18b35e2c7a3ff95fb4a07e58c3f57c70c65c0701.zip
Merge from mainline.
Diffstat (limited to 'src/coding.c')
-rw-r--r--src/coding.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/coding.c b/src/coding.c
index 69b01553e7f..4ee55f7c8e6 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -9358,6 +9358,14 @@ code_convert_region (Lisp_Object start, Lisp_Object end,
setup_coding_system (coding_system, &coding);
coding.mode |= CODING_MODE_LAST_BLOCK;
+ if (BUFFERP (dst_object) && !EQ (dst_object, src_object))
+ {
+ struct buffer *buf = XBUFFER (dst_object);
+ ptrdiff_t buf_pt = BUF_PT (buf);
+
+ invalidate_buffer_caches (buf, buf_pt, buf_pt);
+ }
+
if (encodep)
encode_coding_object (&coding, src_object, from, from_byte, to, to_byte,
dst_object);
@@ -9447,6 +9455,15 @@ code_convert_string (Lisp_Object string, Lisp_Object coding_system,
coding.mode |= CODING_MODE_LAST_BLOCK;
chars = SCHARS (string);
bytes = SBYTES (string);
+
+ if (BUFFERP (dst_object))
+ {
+ struct buffer *buf = XBUFFER (dst_object);
+ ptrdiff_t buf_pt = BUF_PT (buf);
+
+ invalidate_buffer_caches (buf, buf_pt, buf_pt);
+ }
+
if (encodep)
encode_coding_object (&coding, string, 0, 0, chars, bytes, dst_object);
else
@@ -9499,6 +9516,12 @@ decode_file_name (Lisp_Object fname)
Lisp_Object
encode_file_name (Lisp_Object fname)
{
+ /* This is especially important during bootstrap and dumping, when
+ file-name encoding is not yet known, and therefore any non-ASCII
+ file names are unibyte strings, and could only be thrashed if we
+ try to encode them. */
+ if (!STRING_MULTIBYTE (fname))
+ return fname;
#ifdef WINDOWSNT
/* The w32 build pretends to use UTF-8 for file-name encoding, and
converts the file names either to UTF-16LE or to the system ANSI