aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKenichi Handa2010-03-02 13:44:28 +0900
committerKenichi Handa2010-03-02 13:44:28 +0900
commitfc9a17bcf7fdb1aca3b2ecec7e6d36c138907ef4 (patch)
tree309bb666bce9e02dcfb226b10b08fa9ae5922d98
parent743c12d63d0675ecce703c4da9b7f292ac200378 (diff)
downloademacs-fc9a17bcf7fdb1aca3b2ecec7e6d36c138907ef4.tar.gz
emacs-fc9a17bcf7fdb1aca3b2ecec7e6d36c138907ef4.zip
Fix handling of the multibyte form of raw-bytes in unibyte->multibyte conversion.
-rw-r--r--src/ChangeLog4
-rw-r--r--src/character.c17
2 files changed, 16 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index cb9b2d85d11..aec692b39ed 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,9 @@
12010-03-02 Kenichi Handa <handa@m17n.org> 12010-03-02 Kenichi Handa <handa@m17n.org>
2 2
3 * character.c (parse_str_as_multibyte): Fix handling of the
4 multibyte form of raw-bytes.
5 (str_as_multibyte): Likewise.
6
3 * buffer.c (Fset_buffer_multibyte): Fix handling of the multibyte 7 * buffer.c (Fset_buffer_multibyte): Fix handling of the multibyte
4 form of raw-bytes. 8 form of raw-bytes.
5 9
diff --git a/src/character.c b/src/character.c
index 583602fccb7..5912a70d0ce 100644
--- a/src/character.c
+++ b/src/character.c
@@ -630,7 +630,8 @@ parse_str_as_multibyte (str, len, nchars, nbytes)
630 const unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH; 630 const unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH;
631 while (str < adjusted_endp) 631 while (str < adjusted_endp)
632 { 632 {
633 if ((n = MULTIBYTE_LENGTH_NO_CHECK (str)) > 0) 633 if (! CHAR_BYTE8_HEAD_P (*str)
634 && (n = MULTIBYTE_LENGTH_NO_CHECK (str)) > 0)
634 str += n, bytes += n; 635 str += n, bytes += n;
635 else 636 else
636 str++, bytes += 2; 637 str++, bytes += 2;
@@ -639,7 +640,8 @@ parse_str_as_multibyte (str, len, nchars, nbytes)
639 } 640 }
640 while (str < endp) 641 while (str < endp)
641 { 642 {
642 if ((n = MULTIBYTE_LENGTH (str, endp)) > 0) 643 if (! CHAR_BYTE8_HEAD_P (*str)
644 && (n = MULTIBYTE_LENGTH (str, endp)) > 0)
643 str += n, bytes += n; 645 str += n, bytes += n;
644 else 646 else
645 str++, bytes += 2; 647 str++, bytes += 2;
@@ -673,10 +675,13 @@ str_as_multibyte (str, len, nbytes, nchars)
673 { 675 {
674 unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH; 676 unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH;
675 while (p < adjusted_endp 677 while (p < adjusted_endp
678 && ! CHAR_BYTE8_HEAD_P (*p)
676 && (n = MULTIBYTE_LENGTH_NO_CHECK (p)) > 0) 679 && (n = MULTIBYTE_LENGTH_NO_CHECK (p)) > 0)
677 p += n, chars++; 680 p += n, chars++;
678 } 681 }
679 while ((n = MULTIBYTE_LENGTH (p, endp)) > 0) 682 while (p < endp
683 && ! CHAR_BYTE8_HEAD_P (*p)
684 && (n = MULTIBYTE_LENGTH (p, endp)) > 0)
680 p += n, chars++; 685 p += n, chars++;
681 if (nchars) 686 if (nchars)
682 *nchars = chars; 687 *nchars = chars;
@@ -694,7 +699,8 @@ str_as_multibyte (str, len, nbytes, nchars)
694 unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH; 699 unsigned char *adjusted_endp = endp - MAX_MULTIBYTE_LENGTH;
695 while (p < adjusted_endp) 700 while (p < adjusted_endp)
696 { 701 {
697 if ((n = MULTIBYTE_LENGTH_NO_CHECK (p)) > 0) 702 if (! CHAR_BYTE8_HEAD_P (*p)
703 && (n = MULTIBYTE_LENGTH_NO_CHECK (p)) > 0)
698 { 704 {
699 while (n--) 705 while (n--)
700 *to++ = *p++; 706 *to++ = *p++;
@@ -710,7 +716,8 @@ str_as_multibyte (str, len, nbytes, nchars)
710 } 716 }
711 while (p < endp) 717 while (p < endp)
712 { 718 {
713 if ((n = MULTIBYTE_LENGTH (p, endp)) > 0) 719 if (! CHAR_BYTE8_HEAD_P (*p)
720 && (n = MULTIBYTE_LENGTH (p, endp)) > 0)
714 { 721 {
715 while (n--) 722 while (n--)
716 *to++ = *p++; 723 *to++ = *p++;