diff src/editfns.c @ 20804:14fa73136e64

(CONVERTED_BYTE_SIZE): Fix the logic. (Fformat): Update the variable MULTIBYTE according to the result of Fprin1_to_string. Free BUF after making Lisp string from it.
author Kenichi Handa <handa@m17n.org>
date Fri, 30 Jan 1998 11:05:41 +0000
parents d43ba5d91281
children cbaa9e50b013
line wrap: on
line diff
--- a/src/editfns.c	Fri Jan 30 11:05:41 1998 +0000
+++ b/src/editfns.c	Fri Jan 30 11:05:41 1998 +0000
@@ -2166,9 +2166,9 @@
 
 #define CONVERTED_BYTE_SIZE(MULTIBYTE, STRING)				\
   (((MULTIBYTE) && ! STRING_MULTIBYTE (STRING))				\
-   ? XSTRING (STRING)->size_byte					\
-   : count_size_as_multibyte (XSTRING (STRING)->data,			\
-			      XSTRING (STRING)->size_byte))
+   ? count_size_as_multibyte (XSTRING (STRING)->data,			\
+			      XSTRING (STRING)->size_byte)		\
+   : XSTRING (STRING)->size_byte)
 
 DEFUN ("format", Fformat, Sformat, 1, MANY, 0,
   "Format a string out of a control-string and arguments.\n\
@@ -2199,6 +2199,7 @@
   int multibyte = 0;
   unsigned char *this_format;
   int longest_format = 0;
+  Lisp_Object val;
 
   extern char *index ();
 
@@ -2246,6 +2247,8 @@
 	    /* For `S', prin1 the argument and then treat like a string.  */
 	    register Lisp_Object tem;
 	    tem = Fprin1_to_string (args[n], Qnil);
+	    if (STRING_MULTIBYTE (tem))
+	      multibyte = 1;
 	    args[n] = tem;
 	    goto string;
 	  }
@@ -2287,6 +2290,8 @@
 	    /* Anything but a string, convert to a string using princ.  */
 	    register Lisp_Object tem;
 	    tem = Fprin1_to_string (args[n], Qt);
+	    if (STRING_MULTIBYTE (tem))
+	      multibyte = 1;
 	    args[n] = tem;
 	    goto string;
 	  }
@@ -2385,11 +2390,13 @@
 	*p++ = *format++, nchars++;
     }
 
+  val = make_multibyte_string (buf, nchars, p - buf);
+
   /* If we allocated BUF with malloc, free it too.  */
   if (total >= 1000)
     xfree (buf);
 
-  return make_multibyte_string (buf, nchars, p - buf);
+  return val;
 }
 
 /* VARARGS 1 */