X-Git-Url: http://dolda2000.com/gitweb/?p=lisp-utils.git;a=blobdiff_plain;f=charcode.lisp;h=6c08f42271088efc0184a287db93e98eebebeb8c;hp=1d52daee3590af807a98ea6b5f21492b7749bf5d;hb=75545f661901820811acd2f93d70ca908cf3a32d;hpb=4dd02a73cffd7edaa90aebf6641b5779af2fdbcf diff --git a/charcode.lisp b/charcode.lisp index 1d52dae..6c08f42 100644 --- a/charcode.lisp +++ b/charcode.lisp @@ -99,7 +99,7 @@ (with-slots (decoder back buffer read-pos) stream (let ((readbuf (make-array (list len) :element-type '(unsigned-byte 8)))) (loop (unless (< (- (length buffer) read-pos) len) (return t)) - (let ((readlen (read-sequence readbuf back))) + (let ((readlen (read-sequence readbuf back :end (- len (- (length buffer) read-pos))))) (when (= readlen 0) (return-from ccs-ensure-buffer nil)) (funcall decoder readbuf buffer :end readlen)))))) @@ -108,8 +108,8 @@ (declare (type codec-character-stream stream)) (with-slots (read-pos buffer) stream (replace buffer buffer :start2 read-pos) - (setf (fill-pointer buffer) (- (fill-pointer buffer) read-pos) - read-pos 0))) + (setf (fill-pointer buffer) (- (fill-pointer buffer) read-pos) + read-pos 0))) (defmethod stream-read-char ((stream codec-character-stream)) (unless (ccs-ensure-buffer stream 1) @@ -127,8 +127,7 @@ (adjust-array buffer (list (setf (fill-pointer buffer) (+ len 16))))) (replace buffer buffer :start1 16 :end2 len))) - (setf (aref buffer read-pos) char) - (decf read-pos) + (setf (aref buffer (decf read-pos)) char) nil)) (defun ccs-wont-hang-p (stream)