diff --git a/libguile/r6rs-ports.c b/libguile/r6rs-ports.c index 567730530..0e9084853 100644 --- a/libguile/r6rs-ports.c +++ b/libguile/r6rs-ports.c @@ -225,7 +225,7 @@ custom_binary_port_seek (SCM port, scm_t_off offset, int whence) scm_wrong_type_arg_msg (FUNC_NAME, 0, port, "R6RS custom binary port with " "`port-position' support"); - c_result = scm_to_int (result); + c_result = scm_to_off_t (result); if (offset == 0) /* We just want to know the current position. */ break; diff --git a/test-suite/tests/r6rs-ports.test b/test-suite/tests/r6rs-ports.test index ba3131f2e..e6ee10add 100644 --- a/test-suite/tests/r6rs-ports.test +++ b/test-suite/tests/r6rs-ports.test @@ -1,6 +1,6 @@ ;;;; r6rs-ports.test --- R6RS I/O port tests. -*- coding: utf-8; -*- ;;;; -;;;; Copyright (C) 2009-2012, 2013-2015 Free Software Foundation, Inc. +;;;; Copyright (C) 2009-2012, 2013-2015, 2018 Free Software Foundation, Inc. ;;;; Ludovic Courtès ;;;; ;;;; This library is free software; you can redistribute it and/or @@ -498,6 +498,16 @@ not `set-port-position!'" (u8-list->bytevector (map char->integer (string->list "Port!"))))))) + (pass-if-equal "custom binary input port position, long offset" + (expt 2 42) + ;; In Guile <= 2.2.4, 'seek' would throw to 'out-of-range'. + (let* ((port (make-custom-binary-input-port "the port" + (const 0) + (const (expt 2 42)) + #f #f))) + (port-position port))) + + (pass-if-equal "custom binary input port buffered partial reads" "Hello Port!" ;; Check what happens when READ! returns less than COUNT bytes.