1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-10 15:56:18 +00:00

Fix handling of the multibyte form of raw-bytes in unibyte->multibyte conversion.

This commit is contained in:
Kenichi Handa 2010-03-02 13:44:28 +09:00
parent 743c12d63d
commit fc9a17bcf7
2 changed files with 16 additions and 5 deletions

View File

@ -1,5 +1,9 @@
2010-03-02 Kenichi Handa <handa@m17n.org>
* character.c (parse_str_as_multibyte): Fix handling of the
multibyte form of raw-bytes.
(str_as_multibyte): Likewise.
* buffer.c (Fset_buffer_multibyte): Fix handling of the multibyte
form of raw-bytes.

View File

@ -630,7 +630,8 @@ parse_str_as_multibyte (str, len, nchars, nbytes)
const unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH;
while (str < adjusted_endp)
{
if ((n = MULTIBYTE_LENGTH_NO_CHECK (str)) > 0)
if (! CHAR_BYTE8_HEAD_P (*str)
&& (n = MULTIBYTE_LENGTH_NO_CHECK (str)) > 0)
str += n, bytes += n;
else
str++, bytes += 2;
@ -639,7 +640,8 @@ parse_str_as_multibyte (str, len, nchars, nbytes)
}
while (str < endp)
{
if ((n = MULTIBYTE_LENGTH (str, endp)) > 0)
if (! CHAR_BYTE8_HEAD_P (*str)
&& (n = MULTIBYTE_LENGTH (str, endp)) > 0)
str += n, bytes += n;
else
str++, bytes += 2;
@ -673,10 +675,13 @@ str_as_multibyte (str, len, nbytes, nchars)
{
unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH;
while (p < adjusted_endp
&& ! CHAR_BYTE8_HEAD_P (*p)
&& (n = MULTIBYTE_LENGTH_NO_CHECK (p)) > 0)
p += n, chars++;
}
while ((n = MULTIBYTE_LENGTH (p, endp)) > 0)
while (p < endp
&& ! CHAR_BYTE8_HEAD_P (*p)
&& (n = MULTIBYTE_LENGTH (p, endp)) > 0)
p += n, chars++;
if (nchars)
*nchars = chars;
@ -694,7 +699,8 @@ str_as_multibyte (str, len, nbytes, nchars)
unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH;
while (p < adjusted_endp)
{
if ((n = MULTIBYTE_LENGTH_NO_CHECK (p)) > 0)
if (! CHAR_BYTE8_HEAD_P (*p)
&& (n = MULTIBYTE_LENGTH_NO_CHECK (p)) > 0)
{
while (n--)
*to++ = *p++;
@ -710,7 +716,8 @@ str_as_multibyte (str, len, nbytes, nchars)
}
while (p < endp)
{
if ((n = MULTIBYTE_LENGTH (p, endp)) > 0)
if (! CHAR_BYTE8_HEAD_P (*p)
&& (n = MULTIBYTE_LENGTH (p, endp)) > 0)
{
while (n--)
*to++ = *p++;