From 72a9782c8014302b897918541ea20fcffb465dbd Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Wed, 28 May 2014 08:01:45 +0900 Subject: [PATCH] Handling streams separately in file-position since fseek doesn't return the same value as lseek. Fixes issue #220. --- lib/chibi/io/port.c | 2 ++ tests/io-tests.scm | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/lib/chibi/io/port.c b/lib/chibi/io/port.c index e3c80f06..31b5a729 100644 --- a/lib/chibi/io/port.c +++ b/lib/chibi/io/port.c @@ -419,6 +419,8 @@ sexp sexp_seek (sexp ctx, sexp self, sexp x, off_t offset, int whence) { } sexp sexp_tell (sexp ctx, sexp self, sexp x) { + if (sexp_portp(x) && sexp_stream_portp(x)) + return sexp_make_integer(ctx, ftell(sexp_port_stream(x))); return sexp_seek(ctx, self, x, 0, SEEK_CUR); } diff --git a/tests/io-tests.scm b/tests/io-tests.scm index 60ed71a1..c0694c36 100644 --- a/tests/io-tests.scm +++ b/tests/io-tests.scm @@ -140,4 +140,15 @@ (flush-output out) (test 106 sum)) +(test "file-position" + '(0 1 2) + (let* ((p (open-input-file "tests/io-tests.scm")) + (t0 (file-position p))) + (read-char p) + (let ((t1 (file-position p))) + (read-char p) + (let ((t2 (file-position p))) + (close-input-port p) + (list t0 t1 t2))))) + (test-end)