diff --git a/lib/scheme/extras.scm b/lib/scheme/extras.scm index b7e7f491..95f78025 100644 --- a/lib/scheme/extras.scm +++ b/lib/scheme/extras.scm @@ -110,17 +110,17 @@ (cadr o) (bytevector-length vec)))) (if (>= start end) - 0 - (let* ((res (read-bytevector (- end start) in)) - (len (bytevector-length res))) - (cond - ((zero? len) - (read-char (open-input-string ""))) - (else - (do ((i 0 (+ i 1))) - ((>= i len) len) - (bytevector-u8-set! vec (+ i start) (bytevector-u8-ref res i)) - ))))))) + 0 + (let ((res (read-bytevector (- end start) in))) + (cond + ((eof-object? res) + res) + (else + (let ((len (bytevector-length res))) + (do ((i 0 (+ i 1))) + ((>= i len) len) + (bytevector-u8-set! vec (+ i start) (bytevector-u8-ref res i)) + )))))))) (define (write-bytevector vec . o) (let* ((out (if (pair? o) (car o) (current-output-port))) diff --git a/tests/r7rs-tests.scm b/tests/r7rs-tests.scm index e3c29be1..56d3c846 100644 --- a/tests/r7rs-tests.scm +++ b/tests/r7rs-tests.scm @@ -1550,6 +1550,10 @@ (test #u8(1 2 3) (read-bytevector 3 (open-input-bytevector #u8(1 2 3)))) (test #u8(1 2 3) (read-bytevector 3 (open-input-bytevector #u8(1 2 3 4)))) +(test #t + (let ((bv (bytevector 1 2 3 4 5))) + (eof-object? (read-bytevector! bv (open-input-bytevector #u8()))))) + (test #u8(6 7 8 9 10) (let ((bv (bytevector 1 2 3 4 5))) (read-bytevector! bv (open-input-bytevector #u8(6 7 8 9 10)) 0 5)