mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-17 10:27:41 +00:00
(concat): Pay attention to multibyte characters when
TARGET_TYPE is Lisp_String.
This commit is contained in:
parent
df8bf43147
commit
dec58e65b1
1 changed files with 18 additions and 8 deletions
26
src/fns.c
26
src/fns.c
|
|
@ -410,20 +410,30 @@ concat (nargs, args, target_type, last_special)
|
|||
{
|
||||
this = args[argnum];
|
||||
len = Flength (this);
|
||||
if (VECTORP (this) && target_type == Lisp_String)
|
||||
if ((VECTORP (this) || CONSP (this)) && target_type == Lisp_String)
|
||||
|
||||
{
|
||||
/* We must pay attention to a multibyte character which
|
||||
takes more than one byte in string. */
|
||||
int i;
|
||||
Lisp_Object ch;
|
||||
|
||||
for (i = 0; i < XFASTINT (len); i++)
|
||||
{
|
||||
ch = XVECTOR (this)->contents[i];
|
||||
if (! INTEGERP (ch))
|
||||
wrong_type_argument (Qintegerp, ch);
|
||||
leni += Fchar_bytes (ch);
|
||||
}
|
||||
if (VECTORP (this))
|
||||
for (i = 0; i < XFASTINT (len); i++)
|
||||
{
|
||||
ch = XVECTOR (this)->contents[i];
|
||||
if (! INTEGERP (ch))
|
||||
wrong_type_argument (Qintegerp, ch);
|
||||
leni += Fchar_bytes (ch);
|
||||
}
|
||||
else
|
||||
for (; CONSP (this); this = XCONS (this)->cdr)
|
||||
{
|
||||
ch = XCONS (this)->car;
|
||||
if (! INTEGERP (ch))
|
||||
wrong_type_argument (Qintegerp, ch);
|
||||
leni += Fchar_bytes (ch);
|
||||
}
|
||||
}
|
||||
else
|
||||
leni += XFASTINT (len);
|
||||
|
|
|
|||
Loading…
Reference in a new issue