X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fstream.lisp;h=5d339b7c061873d4580ca69189ed69c4b70a0cfb;hb=25fe91bf63fd473d9316675b0e0ca9be0079e9eb;hp=1e6dcdc86b1d39a8b395f6a2b8a593fc1919ecef;hpb=8ef3aa533aba5ac5760e83b798cd6b2388a807a6;p=sbcl.git diff --git a/src/code/stream.lisp b/src/code/stream.lisp index 1e6dcdc..5d339b7 100644 --- a/src/code/stream.lisp +++ b/src/code/stream.lisp @@ -157,9 +157,24 @@ (t (let ((res (funcall (ansi-stream-misc stream) stream :file-position nil))) (when res + #!-sb-unicode (- res (- +ansi-stream-in-buffer-length+ - (ansi-stream-in-index stream)))))))) + (ansi-stream-in-index stream))) + #!+sb-unicode + (let* ((external-format (stream-external-format stream)) + (ef-entry (find-external-format external-format)) + (variable-width-p (variable-width-external-format-p ef-entry)) + (char-len (bytes-for-char-fun ef-entry))) + (- res + (if variable-width-p + (loop with buffer = (ansi-stream-cin-buffer stream) + with start = (ansi-stream-in-index stream) + for i from start below +ansi-stream-in-buffer-length+ + sum (funcall char-len (aref buffer i))) + (* (funcall char-len #\x) ; arbitrary argument + (- +ansi-stream-in-buffer-length+ + (ansi-stream-in-index stream))))))))))) (defun file-position (stream &optional position)