From 96a0d4fe41905e84a109f25848c1fb7c561a737c Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 28 May 2019 19:33:20 -0400 Subject: [PATCH] * lisp/international/mule-cmds.el (encode-coding-char): Fix ASCII case Don't bother with string-as-multibyte since `string` already returns multibyte when needed. Don't forget to encode when the string is ASCII, e.g. for ebcdic case and to make sure we always return a unibyte string. * test/lisp/international/mule-tests.el (mule-cmds-tests--encode-ebcdic): New test. --- lisp/international/mule-cmds.el | 10 +++++----- test/lisp/international/mule-tests.el | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index 27296ecfb2c..ecdab5e931d 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -2913,13 +2913,13 @@ If there's no description string for VALUE, return nil." If CODING-SYSTEM can't safely encode CHAR, return nil. The 3rd optional argument CHARSET, if non-nil, is a charset preferred on encoding." - (let* ((str1 (string-as-multibyte (string char))) - (str2 (string-as-multibyte (string char char))) + (let* ((str1 (string char)) + (str2 (string char char)) (found (find-coding-systems-string str1)) enc1 enc2 i1 i2) - (if (and (consp found) - (eq (car found) 'undecided)) - str1 + (if (eq (car-safe found) 'undecided) ;Aka (not (multibyte-string-p str1)) + ;; `char' is ASCII. + (encode-coding-string str1 coding-system) (when (memq (coding-system-base coding-system) found) ;; We must find the encoded string of CHAR. But, just encoding ;; CHAR will put extra control sequences (usually to designate diff --git a/test/lisp/international/mule-tests.el b/test/lisp/international/mule-tests.el index 4c937caa142..678cbc29738 100644 --- a/test/lisp/international/mule-tests.el +++ b/test/lisp/international/mule-tests.el @@ -36,6 +36,10 @@ (find-auto-coding "" (buffer-size))) '(utf-8 . :coding))))) +(ert-deftest mule-cmds-tests--encode-ebcdic () + (should (equal (encode-coding-char ?a 'ebcdic-int) "\201")) + (should (not (multibyte-string-p (encode-coding-char ?a 'utf-8))))) + ;; Stop "Local Variables" above causing confusion when visiting this file. -- 2.39.5