From dd168e5506b3457a296a09f00d9ddb2742b8ec82 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Thu, 1 Nov 2012 23:05:12 +0900 Subject: [PATCH] Fixing (byte)vector-copy! for non-zero at. --- lib/scheme/extras.scm | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/scheme/extras.scm b/lib/scheme/extras.scm index 29a9e4bf..1fe35c5f 100644 --- a/lib/scheme/extras.scm +++ b/lib/scheme/extras.scm @@ -152,10 +152,11 @@ (apply for-each proc (map vector->list (cons vec lov))))) (define (vector-copy! to at from . o) - (let ((start (if (pair? o) (car o) 0)) - (end (if (and (pair? o) (pair? (cdr o))) (cadr o) (vector-length from)))) + (let* ((start (if (pair? o) (car o) 0)) + (end (if (and (pair? o) (pair? (cdr o))) (cadr o) (vector-length from))) + (limit (min end (+ start (- (vector-length to) at))))) (do ((i at (+ i 1)) (j start (+ j 1))) - ((>= j end)) + ((>= j limit)) (vector-set! to i (vector-ref from j))))) (define (vector->string vec . o) @@ -165,12 +166,13 @@ (list->vector (apply string->list vec o))) (define (bytevector-copy! to at from . o) - (let ((start (if (pair? o) (car o) 0)) - (end (if (and (pair? o) (pair? (cdr o))) - (cadr o) - (bytevector-length from)))) + (let* ((start (if (pair? o) (car o) 0)) + (end (if (and (pair? o) (pair? (cdr o))) + (cadr o) + (bytevector-length from))) + (limit (min end (+ start (- (bytevector-length to) at))))) (do ((i at (+ i 1)) (j start (+ j 1))) - ((>= j end)) + ((>= j limit)) (bytevector-u8-set! to i (bytevector-u8-ref from j))))) (define (bytevector-copy vec . o)