Fixing read-bytevector! on no input (adapted patch from Lorenzo).

This commit is contained in:
Alex Shinn 2012-12-29 09:29:05 +09:00
parent cdc9465b1b
commit 97ee1b7b65
2 changed files with 15 additions and 11 deletions

View file

@ -111,16 +111,16 @@
(bytevector-length vec)))) (bytevector-length vec))))
(if (>= start end) (if (>= start end)
0 0
(let* ((res (read-bytevector (- end start) in)) (let ((res (read-bytevector (- end start) in)))
(len (bytevector-length res)))
(cond (cond
((zero? len) ((eof-object? res)
(read-char (open-input-string ""))) res)
(else (else
(let ((len (bytevector-length res)))
(do ((i 0 (+ i 1))) (do ((i 0 (+ i 1)))
((>= i len) len) ((>= i len) len)
(bytevector-u8-set! vec (+ i start) (bytevector-u8-ref res i)) (bytevector-u8-set! vec (+ i start) (bytevector-u8-ref res i))
))))))) ))))))))
(define (write-bytevector vec . o) (define (write-bytevector vec . o)
(let* ((out (if (pair? o) (car o) (current-output-port))) (let* ((out (if (pair? o) (car o) (current-output-port)))

View file

@ -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))))
(test #u8(1 2 3) (read-bytevector 3 (open-input-bytevector #u8(1 2 3 4)))) (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) (test #u8(6 7 8 9 10)
(let ((bv (bytevector 1 2 3 4 5))) (let ((bv (bytevector 1 2 3 4 5)))
(read-bytevector! bv (open-input-bytevector #u8(6 7 8 9 10)) 0 5) (read-bytevector! bv (open-input-bytevector #u8(6 7 8 9 10)) 0 5)