# HG changeset patch # User Kenichi Handa # Date 871186399 0 # Node ID 50f47ef6ce9a1d33bcc5241f53ba061e2477ef15 # Parent 7ea957cd48e2b33a2c72e59815feca8664710458 (concat): Pay attention to multibyte characters when TARGET_TYPE is Lisp_String. diff -r 7ea957cd48e2 -r 50f47ef6ce9a src/fns.c --- a/src/fns.c Sun Aug 10 04:13:19 1997 +0000 +++ b/src/fns.c Sun Aug 10 04:13:19 1997 +0000 @@ -410,20 +410,30 @@ { 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);