Mercurial > emacs
changeset 27434:8c80483f84c7
(Fstring): If there is a multibyte char among
the args, always return a multibyte string.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Tue, 25 Jan 2000 21:43:08 +0000 |
parents | 87dcc6a2c31b |
children | 4bd7fdf959dc |
files | src/charset.c |
diffstat | 1 files changed, 12 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/charset.c Tue Jan 25 15:59:42 2000 +0000 +++ b/src/charset.c Tue Jan 25 21:43:08 2000 +0000 @@ -1361,19 +1361,26 @@ 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); + combining problem. Make a multibyte string if there is any + multibyte character in ARGS to make sure that `(insert 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; }