diff options
author | Andy Wingo <wingo@pobox.com> | 2011-01-21 08:27:08 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2011-01-21 08:27:08 +0100 |
commit | b04f841d5fa6d3448bb8f976bb27ee3e9a06f83c (patch) | |
tree | 20d18a47ddbaaac69d3ab93145e46daec7376844 | |
parent | dc78bee588718ce4df252e5d1773b9d895c6f43f (diff) | |
download | guile-b04f841d5fa6d3448bb8f976bb27ee3e9a06f83c.tar.gz |
implement port-eof?
* 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.
-rw-r--r-- | module/rnrs.scm | 5 | ||||
-rw-r--r-- | module/rnrs/io/ports.scm | 8 | ||||
-rw-r--r-- | 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" |