diff options
| author | Kenichi Handa | 1998-10-14 07:17:22 +0000 |
|---|---|---|
| committer | Kenichi Handa | 1998-10-14 07:17:22 +0000 |
| commit | 5e522af4f3a9ea8da50b176365526d25c71c4782 (patch) | |
| tree | 66d46b1dc6ec897aa6de60deb0c26e6f73a63c86 /src/data.c | |
| parent | 95b8aba74b18f5bcfc1410e3cd653b50c37ae301 (diff) | |
| download | emacs-5e522af4f3a9ea8da50b176365526d25c71c4782.tar.gz emacs-5e522af4f3a9ea8da50b176365526d25c71c4782.zip | |
(Faset): Fix previous change.
Diffstat (limited to 'src/data.c')
| -rw-r--r-- | src/data.c | 26 |
1 files changed, 12 insertions, 14 deletions
diff --git a/src/data.c b/src/data.c index da9d86f81bc..bed8bda7b7c 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -1853,8 +1853,8 @@ IDX starts at 0.") | |||
| 1853 | else if (STRING_MULTIBYTE (array)) | 1853 | else if (STRING_MULTIBYTE (array)) |
| 1854 | { | 1854 | { |
| 1855 | int c, idxval_byte, new_len, actual_len; | 1855 | int c, idxval_byte, new_len, actual_len; |
| 1856 | int prev_byte; | ||
| 1856 | unsigned char *p, workbuf[4], *str; | 1857 | unsigned char *p, workbuf[4], *str; |
| 1857 | int recount = 0; | ||
| 1858 | 1858 | ||
| 1859 | if (idxval < 0 || idxval >= XSTRING (array)->size) | 1859 | if (idxval < 0 || idxval >= XSTRING (array)->size) |
| 1860 | args_out_of_range (array, idx); | 1860 | args_out_of_range (array, idx); |
| @@ -1862,25 +1862,23 @@ IDX starts at 0.") | |||
| 1862 | idxval_byte = string_char_to_byte (array, idxval); | 1862 | idxval_byte = string_char_to_byte (array, idxval); |
| 1863 | p = &XSTRING (array)->data[idxval_byte]; | 1863 | p = &XSTRING (array)->data[idxval_byte]; |
| 1864 | 1864 | ||
| 1865 | actual_len | 1865 | actual_len = MULTIBYTE_FORM_LENGTH (p, STRING_BYTES (XSTRING (array))); |
| 1866 | = MULTIBYTE_FORM_LENGTH (p, STRING_BYTES (XSTRING (array)) - idxval_byte); | ||
| 1867 | CHECK_NUMBER (newelt, 2); | 1866 | CHECK_NUMBER (newelt, 2); |
| 1868 | new_len = CHAR_STRING (XINT (newelt), workbuf, str); | 1867 | new_len = CHAR_STRING (XINT (newelt), workbuf, str); |
| 1869 | if (actual_len != new_len) | 1868 | if (actual_len != new_len) |
| 1870 | error ("Attempt to change byte length of a string"); | 1869 | error ("Attempt to change byte length of a string"); |
| 1871 | if (!CHAR_HEAD_P (*str) | 1870 | |
| 1872 | || !CHAR_HEAD_P (XSTRING (array)->data[idxval_byte + actual_len])) | 1871 | /* We can't accept a change causing byte combining. */ |
| 1873 | /* We may have to combine bytes. */ | 1872 | if ((idxval > 0 && !CHAR_HEAD_P (*str) |
| 1874 | recount = 1; | 1873 | && (prev_byte = string_char_to_byte (array, idxval - 1), |
| 1874 | (prev_byte + 1 < idxval_byte | ||
| 1875 | || (p[-1] >= 0x80 && p[-1] < 0xA0)))) | ||
| 1876 | || (idxval < XSTRING (array)->size - 1 | ||
| 1877 | && (*str >=0x80 && *str < 0xA0) | ||
| 1878 | && !CHAR_HEAD_P (p[actual_len]))) | ||
| 1879 | error ("Attempt to change char length of a string"); | ||
| 1875 | while (new_len--) | 1880 | while (new_len--) |
| 1876 | *p++ = *str++; | 1881 | *p++ = *str++; |
| 1877 | if (recount) | ||
| 1878 | { | ||
| 1879 | XSTRING (array)->size = | ||
| 1880 | chars_in_text (XSTRING (array)->data, | ||
| 1881 | STRING_BYTES (XSTRING (array))); | ||
| 1882 | clear_string_char_byte_cache (); | ||
| 1883 | } | ||
| 1884 | } | 1882 | } |
| 1885 | else | 1883 | else |
| 1886 | { | 1884 | { |