aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
authorKenichi Handa1998-10-14 07:17:22 +0000
committerKenichi Handa1998-10-14 07:17:22 +0000
commit5e522af4f3a9ea8da50b176365526d25c71c4782 (patch)
tree66d46b1dc6ec897aa6de60deb0c26e6f73a63c86 /src/data.c
parent95b8aba74b18f5bcfc1410e3cd653b50c37ae301 (diff)
downloademacs-5e522af4f3a9ea8da50b176365526d25c71c4782.tar.gz
emacs-5e522af4f3a9ea8da50b176365526d25c71c4782.zip
(Faset): Fix previous change.
Diffstat (limited to 'src/data.c')
-rw-r--r--src/data.c26
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 {