From b04f841d5fa6d3448bb8f976bb27ee3e9a06f83c Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 21 Jan 2011 08:27:08 +0100 Subject: [PATCH] implement port-eof? MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit * module/rnrs/io/ports.scm (port-eof?): Implement. * module/rnrs.scm: Re-export port-eof?. * test-suite/tests/r6rs-ports.test ("7.2.5 End-of-File Object"): Add test. Thanks to Göran Weinholt for the report. --- module/rnrs.scm | 5 +++-- module/rnrs/io/ports.scm | 8 +++++++- test-suite/tests/r6rs-ports.test | 7 +++++-- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/module/rnrs.scm b/module/rnrs.scm index e10967bb4..476a3ab2d 100644 --- a/module/rnrs.scm +++ b/module/rnrs.scm @@ -1,6 +1,6 @@ ;;; rnrs.scm --- The R6RS composite library -;; Copyright (C) 2010 Free Software Foundation, Inc. +;; Copyright (C) 2010, 2011 Free Software Foundation, Inc. ;; ;; This library is free software; you can redistribute it and/or ;; modify it under the terms of the GNU Lesser General Public @@ -165,7 +165,8 @@ make-transcoder transcoder-codec native-transcoder latin-1-codec utf-8-codec utf-16-codec - eof-object? port? input-port? output-port? eof-object port-transcoder + eof-object? port? input-port? output-port? eof-object port-eof? + port-transcoder binary-port? transcoded-port port-position set-port-position! port-has-port-position? port-has-set-port-position!? close-port call-with-port diff --git a/module/rnrs/io/ports.scm b/module/rnrs/io/ports.scm index 854ea0919..15d62bd3f 100644 --- a/module/rnrs/io/ports.scm +++ b/module/rnrs/io/ports.scm @@ -1,6 +1,6 @@ ;;;; ports.scm --- R6RS port API -*- coding: utf-8 -*- -;;;; Copyright (C) 2009, 2010 Free Software Foundation, Inc. +;;;; Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc. ;;;; ;;;; This library is free software; you can redistribute it and/or ;;;; modify it under the terms of the GNU Lesser General Public @@ -37,6 +37,7 @@ ;; input & output ports port? input-port? output-port? + port-eof? port-transcoder binary-port? transcoded-port port-position set-port-position! port-has-port-position? port-has-set-port-position!? @@ -191,6 +192,11 @@ ;; So far, we don't support transcoders other than the binary transcoder. #t) +(define (port-eof? port) + (eof-object? (if (binary-port? port) + (lookahead-u8 port) + (lookahead-char port)))) + (define (transcoded-port port transcoder) "Return a new textual port based on @var{port}, using @var{transcoder} to encode and decode data written to or diff --git a/test-suite/tests/r6rs-ports.test b/test-suite/tests/r6rs-ports.test index 40bde08b1..410e9d12e 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, 2010 Free Software Foundation, Inc. +;;;; Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc. ;;;; Ludovic Courtès ;;;; ;;;; This library is free software; you can redistribute it and/or @@ -35,7 +35,10 @@ (pass-if "eof-object" (and (eqv? (eof-object) (eof-object)) - (eq? (eof-object) (eof-object))))) + (eq? (eof-object) (eof-object)))) + + (pass-if "port-eof?" + (port-eof? (open-input-string "")))) (with-test-prefix "7.2.8 Binary Input" -- 2.20.1