diff options
| author | Kenichi Handa | 2010-03-02 13:44:28 +0900 |
|---|---|---|
| committer | Kenichi Handa | 2010-03-02 13:44:28 +0900 |
| commit | fc9a17bcf7fdb1aca3b2ecec7e6d36c138907ef4 (patch) | |
| tree | 309bb666bce9e02dcfb226b10b08fa9ae5922d98 | |
| parent | 743c12d63d0675ecce703c4da9b7f292ac200378 (diff) | |
| download | emacs-fc9a17bcf7fdb1aca3b2ecec7e6d36c138907ef4.tar.gz emacs-fc9a17bcf7fdb1aca3b2ecec7e6d36c138907ef4.zip | |
Fix handling of the multibyte form of raw-bytes in unibyte->multibyte conversion.
| -rw-r--r-- | src/ChangeLog | 4 | ||||
| -rw-r--r-- | src/character.c | 17 |
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 @@ | |||
| 1 | 2010-03-02 Kenichi Handa <handa@m17n.org> | 1 | 2010-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++; |