summaryrefslogtreecommitdiff
path: root/src/editfns.c
diff options
context:
space:
mode:
authorKenichi Handa <handa@m17n.org>2003-01-17 00:47:58 +0000
committerKenichi Handa <handa@m17n.org>2003-01-17 00:47:58 +0000
commit063b53b1b0b2c1e17975803159455ed4bd1bb585 (patch)
tree4eebe6b55d4b40d38b11ec2ec1c7b553202218f0 /src/editfns.c
parent1255b58ae9bbc3d9c8d6f426ec22facbc307fa04 (diff)
downloademacs-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.c24
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')