Lisp_Object table;
int multibyte;
{
- register int num = 0, c;
+ register int num = 0;
if (! multibyte)
{
{
int c1 = translate_char (table, -1, charset, c1, c2);
if (c1 >= 0)
- charset = CHAR_CHARSET (c);
+ charset = CHAR_CHARSET (c1);
}
if (!charsets[charset])
if (c1 == 0
? c2 != 0
: (c2 == 0
- ? !CHAR_COMPONENTS_VALID_P (charset, c1, 0x20)
- : !CHAR_COMPONENTS_VALID_P (charset, c1, c2)))
+ ? !CHAR_COMPONENTS_VALID_P (charset_id, c1, 0x20)
+ : !CHAR_COMPONENTS_VALID_P (charset_id, c1, c2)))
error ("Invalid code points for charset ID %d: %d %d", charset_id, c1, c2);
return make_number (MAKE_CHAR (charset_id, c1, c2));
unsigned char *buf = (unsigned char *) alloca (MAX_MULTIBYTE_LENGTH * n);
unsigned char *p = buf;
Lisp_Object val;
- int c;
+ int c, multibyte_p = 0;
for (i = 0; i < n; i++)
{
- if (!INTEGERP (args[i]))
- CHECK_NUMBER (args[i], 0);
+ CHECK_NUMBER (args[i], 0);
c = XINT (args[i]);
p += CHAR_STRING (c, p);
+
+ if (!SINGLE_BYTE_CHAR_P (c))
+ multibyte_p = 1;
}
- /* Here, we can't use make_string_from_bytes because of byte
- combining problem. */
- val = make_string (buf, p - buf);
+ /* Here, we can't use make_string_from_bytes because of the byte
+ combining problem. Make a multibyte string if there is any
+ multibyte character in ARGS to make sure that `(string 2276)'
+ returns a multibyte string if running --unibyte. */
+ if (multibyte_p)
+ val = make_multibyte_string (buf, n, p - buf);
+ else
+ val = make_unibyte_string (buf, p - buf);
return val;
}