diff options
author | Ian Price <ianprice90@googlemail.com> | 2011-04-08 02:49:20 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2011-04-11 18:14:18 +0200 |
commit | c89b45299329d034875429804f18768c1ea96713 (patch) | |
tree | 56b9456b6855733fbc295e3d18d853a8dd14be3b | |
parent | 15993bce1cd0a2e69f11a6ac1725fa7a219c5b7c (diff) | |
download | guile-c89b45299329d034875429804f18768c1ea96713.tar.gz |
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.
-rw-r--r-- | libguile/r6rs-ports.c | 2 | ||||
-rw-r--r-- | 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 1f724158a..7473db94b 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 70b5853b2..01d8235fa 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 |