From dec58e65b13945edd1ffaf61d84c092efe517a05 Mon Sep 17 00:00:00 2001 From: Kenichi Handa Date: Sun, 10 Aug 1997 04:13:19 +0000 Subject: [PATCH] (concat): Pay attention to multibyte characters when TARGET_TYPE is Lisp_String. --- src/fns.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/fns.c b/src/fns.c index 20eb5bbf2a9..8a76dcd1cff 100644 --- a/src/fns.c +++ b/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); -- 2.39.2