X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fexternal-formats%2Fmb-util.lisp;h=5569a9fcac02fb3585296547644475f9d431e083;hb=cd1b14acf6f548b28b8a14e554d779f0473122ec;hp=c76bc423fee6b0d736f03cf8d7b47d939efe222f;hpb=75476d1d19ac3d7239c8963a498c447a8368433d;p=sbcl.git diff --git a/src/code/external-formats/mb-util.lisp b/src/code/external-formats/mb-util.lisp index c76bc42..5569a9f 100644 --- a/src/code/external-formats/mb-util.lisp +++ b/src/code/external-formats/mb-util.lisp @@ -248,7 +248,15 @@ ;; for fd-stream.lisp (define-external-format/variable-width ,aliases t - (mb-char-len (or (,ucs-to-mb (char-code byte)) -1)) + ;; KLUDGE: it so happens that at present (2009-10-22) none of + ;; the external formats defined with + ;; define-multibyte-encoding can encode the unicode + ;; replacement character, so we hardcode the preferred + ;; replacement here. + #\? + (block size + (mb-char-len (or (,ucs-to-mb (char-code byte)) + (return-from size 0)))) (let ((mb (,ucs-to-mb bits))) (if (null mb) (external-format-encoding-error stream byte) @@ -259,7 +267,7 @@ (3 (setf (sap-ref-8 sap tail) (ldb (byte 8 16) mb) (sap-ref-8 sap (1+ tail)) (ldb (byte 8 8) mb) (sap-ref-8 sap (+ 2 tail)) (ldb (byte 8 0) mb)))))) - (,mb-len byte) + (1 (,mb-len byte)) (let* ((mb (ecase size (1 byte) (2 (let ((byte2 (sap-ref-8 sap (1+ head))))