summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Price <ianprice90@googlemail.com>2011-04-08 02:49:20 +0100
committerAndy Wingo <wingo@pobox.com>2011-04-11 18:14:18 +0200
commitc89b45299329d034875429804f18768c1ea96713 (patch)
tree56b9456b6855733fbc295e3d18d853a8dd14be3b
parent15993bce1cd0a2e69f11a6ac1725fa7a219c5b7c (diff)
downloadguile-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.c2
-rw-r--r--test-suite/tests/r6rs-ports.test9
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