diff --git a/io.lisp b/io.lisp index 5df161902d6d3fc607b1a4f4f1bec37df3a04186..59d6a8c8b31e8d1a0d61d25783725490e871fa31 100644 --- a/io.lisp +++ b/io.lisp @@ -111,11 +111,13 @@ unless it's NIL, which means the system default." "Reads data from INPUT and writes it to OUTPUT. Both INPUT and OUTPUT must be streams, they will be passed to READ-SEQUENCE and WRITE-SEQUENCE and must have compatible element-types." - (loop - :for bytes-read = (read-sequence buffer input) - :while (= bytes-read buffer-size) - :do (write-sequence buffer output) - :finally (progn - (write-sequence buffer output :end bytes-read) - (when finish-output - (finish-output output))))) + (let ((bytes-written 0)) + (loop + :for bytes-read = (read-sequence buffer input) + :until (zerop bytes-read) + :do (progn + (write-sequence buffer output :end bytes-read) + (incf bytes-written bytes-read))) + (when finish-output + (finish-output output)) + bytes-written))