>From c3fd372c573ae1bc9cdf3cb0ef69d6a0592ec020 Mon Sep 17 00:00:00 2001 From: Ian Price Date: Fri, 8 Apr 2011 02:49:20 +0100 Subject: [PATCH] Fix fencepost error in bip_seek * libguile/r6rs-ports.c (bip_seek): Fix to allow seeking to end of port. * test-suite/tests/r6rs-ports.test ("bytevector input port can seek to very end"): Add tests. --- libguile/r6rs-ports.c | 2 +- test-suite/tests/r6rs-ports.test | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletions(-) diff --git a/libguile/r6rs-ports.c b/libguile/r6rs-ports.c index 1f72415..7473db9 100644 --- a/libguile/r6rs-ports.c +++ b/libguile/r6rs-ports.c @@ -136,7 +136,7 @@ bip_seek (SCM port, scm_t_off offset, int whence) /* Fall through. */ case SEEK_SET: - if (c_port->read_buf + offset < c_port->read_end) + if (c_port->read_buf + offset <= c_port->read_end) { c_port->read_pos = c_port->read_buf + offset; c_result = offset; diff --git a/test-suite/tests/r6rs-ports.test b/test-suite/tests/r6rs-ports.test index 70b5853..01d8235 100644 --- a/test-suite/tests/r6rs-ports.test +++ b/test-suite/tests/r6rs-ports.test @@ -320,6 +320,15 @@ (u8-list->bytevector (map char->integer (string->list "Port!"))))))) + (pass-if "bytevector input port can seek to very end" + (let ((empty (open-bytevector-input-port '#vu8())) + (not-empty (open-bytevector-input-port '#vu8(1 2 3)))) + (and (begin (set-port-position! empty (port-position empty)) + (= 0 (port-position empty))) + (begin (get-bytevector-n not-empty 3) + (set-port-position! not-empty (port-position not-empty)) + (= 3 (port-position not-empty)))))) + (pass-if-exception "make-custom-binary-input-port [wrong-num-args]" exception:wrong-num-args -- 1.7.3.4