comparison src/data.c @ 89526:58eb89f2fdfc

(Faset): Check newelt by CHECK_CHARACTER. Don't change multibyteness of the result when newelt is an 8-bit character.
author Kenichi Handa <handa@m17n.org>
date Fri, 26 Sep 2003 11:20:13 +0000
parents 2f877ed80fa6
children 68c22ea6027c
comparison
equal deleted inserted replaced
89525:1b757cdb6144 89526:58eb89f2fdfc
1927 int idxval_byte, prev_bytes, new_bytes, nbytes; 1927 int idxval_byte, prev_bytes, new_bytes, nbytes;
1928 unsigned char workbuf[MAX_MULTIBYTE_LENGTH], *p0 = workbuf, *p1; 1928 unsigned char workbuf[MAX_MULTIBYTE_LENGTH], *p0 = workbuf, *p1;
1929 1929
1930 if (idxval < 0 || idxval >= SCHARS (array)) 1930 if (idxval < 0 || idxval >= SCHARS (array))
1931 args_out_of_range (array, idx); 1931 args_out_of_range (array, idx);
1932 CHECK_NUMBER (newelt); 1932 CHECK_CHARACTER (newelt);
1933 1933
1934 nbytes = SBYTES (array); 1934 nbytes = SBYTES (array);
1935 1935
1936 idxval_byte = string_char_to_byte (array, idxval); 1936 idxval_byte = string_char_to_byte (array, idxval);
1937 p1 = SDATA (array) + idxval_byte; 1937 p1 = SDATA (array) + idxval_byte;
1964 { 1964 {
1965 if (idxval < 0 || idxval >= SCHARS (array)) 1965 if (idxval < 0 || idxval >= SCHARS (array))
1966 args_out_of_range (array, idx); 1966 args_out_of_range (array, idx);
1967 CHECK_NUMBER (newelt); 1967 CHECK_NUMBER (newelt);
1968 1968
1969 if (XINT (newelt) < 0 || ASCII_CHAR_P (XINT (newelt))) 1969 if (XINT (newelt) < 0 || ASCII_CHAR_P (XINT (newelt))
1970 || CHAR_BYTE8_P (XINT (newelt)))
1970 SSET (array, idxval, XINT (newelt)); 1971 SSET (array, idxval, XINT (newelt));
1971 else 1972 else
1972 { 1973 {
1973 /* We must relocate the string data while converting it to 1974 /* We must relocate the string data while converting it to
1974 multibyte. */ 1975 multibyte. */