The issue is with external format input routines not returning until EOF or till the requested amount of characters is read.
Without testing the effect of this properly, it seems to me that
diff --git a/src/code/fd-stream.lisp b/src/code/fd-stream.lisp
index 969b177..5145258 100644
--- a/src/code/fd-stream.lisp
+++ b/src/code/fd-stream.lisp
@@ -1546,8 +1546,8 @@ (return-from ,in-function total-copied)))
(setf (buffer-head ibuf) head)
;; Maybe we need to refill the stream buffer.
- (cond ( ;; If there were enough data in the stream buffer, we're done.
- (= total-copied requested)
+ (cond ( ;; If was data in the stream buffer, we're done.
+ (plusp total-copied) (return total-copied)) ( ;; If EOF, we're done in another way. (or (eq decode-break-reason 'eof)
is TRT -- at least it solves the reported case. (Here's hoping launchpad doesn't mangle that too badly...)
The issue is with external format input routines not returning until EOF or till the requested amount of characters is read.
Without testing the effect of this properly, it seems to me that
diff --git a/src/code/ fd-stream. lisp b/src/code/ fd-stream. lisp fd-stream. lisp fd-stream. lisp
(return- from ,in-function total-copied)))
(return total-copied))
( ;; If EOF, we're done in another way.
(or (eq decode-break-reason 'eof)
index 969b177..5145258 100644
--- a/src/code/
+++ b/src/code/
@@ -1546,8 +1546,8 @@
(setf (buffer-head ibuf) head)
;; Maybe we need to refill the stream buffer.
- (cond ( ;; If there were enough data in the stream buffer, we're done.
- (= total-copied requested)
+ (cond ( ;; If was data in the stream buffer, we're done.
+ (plusp total-copied)
is TRT -- at least it solves the reported case. (Here's hoping launchpad doesn't mangle that too badly...)