#43: unread-char doesn't change file-position ---------------------+------------------------------------------------------ Reporter: rtoy | Owner: Type: defect | Status: new Priority: major | Milestone: Component: Unicode | Version: 20b Keywords: | ---------------------+------------------------------------------------------ This test is from Douglas Crosher, on the maxima mailing list. {{{ (with-open-file (ostream "ctest.txt" :direction :output :external-format #+clisp "utf-8" #-clisp :utf-8) (dotimes (i 1000) (write-char (code-char #x1234) ostream)))
(with-open-file (stream "ctest.txt" :direction :input :external-format #+clisp "utf-8" #-clisp :utf-8) (let ((p0 (file-position stream)) (ch (read-char stream))) (unread-char ch stream) (let ((p0* (file-position stream))) (if (eql p0* p0) "Ok" "Broken")))) }}}
Cmucl returns "Broken" because {{{p0}}} = 0 but {{{p0*}}} = 2. I think {{{unread-char}}} didn't update everything needed by our unicode stream buffers.