Fix Dired display and operations on file names with raw bytes

* src/coding.c (decode_coding): When flushing remaining raw bytes
from multibyte text, copy 2-byte forms of eight-bit-*
characters as single characters, not as 2 raw bytes.  (Bug#29189)
This commit is contained in:
Eli Zaretskii 2018-01-06 10:56:21 +02:00
parent d9d6e8a04c
commit a377c652b5

View file

@ -7423,10 +7423,23 @@ decode_coding (struct coding_system *coding)
while (nbytes-- > 0)
{
int c = *src++;
int c;
if (c & 0x80)
c = BYTE8_TO_CHAR (c);
/* Copy raw bytes in their 2-byte forms from multibyte
text as single characters. */
if (coding->src_multibyte
&& CHAR_BYTE8_HEAD_P (*src) && nbytes > 0)
{
c = STRING_CHAR_ADVANCE (src);
nbytes--;
}
else
{
c = *src++;
if (c & 0x80)
c = BYTE8_TO_CHAR (c);
}
coding->charbuf[coding->charbuf_used++] = c;
}
produce_chars (coding, Qnil, 1);