diff options
author | Kenichi Handa <handa@m17n.org> | 2003-01-17 00:47:58 +0000 |
---|---|---|
committer | Kenichi Handa <handa@m17n.org> | 2003-01-17 00:47:58 +0000 |
commit | 063b53b1b0b2c1e17975803159455ed4bd1bb585 (patch) | |
tree | 4eebe6b55d4b40d38b11ec2ec1c7b553202218f0 /src/editfns.c | |
parent | 1255b58ae9bbc3d9c8d6f426ec22facbc307fa04 (diff) | |
download | emacs-063b53b1b0b2c1e17975803159455ed4bd1bb585.tar.gz |
(Fformat): Convert an unibyte char argument that is
formatted by "%c" to multibyte if the total result must be a
multibyte string.
Diffstat (limited to 'src/editfns.c')
-rw-r--r-- | src/editfns.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/editfns.c b/src/editfns.c index 6539cd11d45..28c97c11a6b 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -3359,17 +3359,25 @@ usage: (format STRING &rest OBJECTS) */) error ("Invalid format operation %%%c", *format); thissize = 30; - if (*format == 'c' - && (! SINGLE_BYTE_CHAR_P (XINT (args[n])) - || XINT (args[n]) == 0)) + if (*format == 'c') { - if (! multibyte) + if (! SINGLE_BYTE_CHAR_P (XINT (args[n])) + || XINT (args[n]) == 0) { - multibyte = 1; - goto retry; + if (! multibyte) + { + multibyte = 1; + goto retry; + } + args[n] = Fchar_to_string (args[n]); + thissize = SBYTES (args[n]); + } + else if (! ASCII_BYTE_P (XINT (args[n])) && multibyte) + { + args[n] + = Fchar_to_string (Funibyte_char_to_multibyte (args[n])); + thissize = SBYTES (args[n]); } - args[n] = Fchar_to_string (args[n]); - thissize = SBYTES (args[n]); } } else if (FLOATP (args[n]) && *format != 's') |