Mercurial > emacs
changeset 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 | 0fa2183c587d |
children | 918448e5d294 |
files | src/editfns.c |
diffstat | 1 files changed, 11 insertions(+), 4 deletions(-) [+] |
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 */