~ chicken-core (chicken-5) c78cdcd9347a1e501ccc8882cd8c1cadeb76f0c3
commit c78cdcd9347a1e501ccc8882cd8c1cadeb76f0c3
Author: Evan Hanson <evhan@foldling.org>
AuthorDate: Mon Jan 18 23:31:53 2016 +1300
Commit: Evan Hanson <evhan@foldling.org>
CommitDate: Tue Mar 8 22:52:33 2016 +1300
Make `read-string` return #!eof on empty input
diff --git a/extras.scm b/extras.scm
index a766d209..3b337981 100644
--- a/extras.scm
+++ b/extras.scm
@@ -165,7 +165,9 @@
(define ##sys#read-string/port
(lambda (n p)
(##sys#check-input-port p #t 'read-string)
- (cond (n (##sys#check-fixnum n 'read-string)
+ (cond ((eof-object? (##sys#peek-char-0 p))
+ (if (eq? n 0) "" #!eof))
+ (n (##sys#check-fixnum n 'read-string)
(let* ((str (##sys#make-string n))
(n2 (##sys#read-string! n str p 0)) )
(if (eq? n n2)
@@ -175,7 +177,8 @@
(let ([out (open-output-string)]
(buf (make-string read-string-buffer-size)))
(let loop ()
- (let ((n (##sys#read-string! read-string-buffer-size
+ (let ((c (peek-char p))
+ (n (##sys#read-string! read-string-buffer-size
buf p 0)))
(cond ((eq? n 0)
(get-output-string out))
diff --git a/manual/Unit extras b/manual/Unit extras
index 7c16be42..e66ea6ac 100644
--- a/manual/Unit extras
+++ b/manual/Unit extras
@@ -179,12 +179,14 @@ a string naming a file. Returns a list of strings, each string representing a li
Read or write {{NUM}} characters from/to {{PORT}}, which defaults to the
value of {{(current-input-port)}} or {{(current-output-port)}}, respectively.
-If {{NUM}} is {{#f}} or not given, then all data
-up to the end-of-file is read, or, in the case of {{write-string}} the whole
-string is written. If no more input is available, {{read-string}} returns the
-empty string. {{read-string!}} reads destructively into the given {{STRING}} argument,
-but never more characters than would fit into {{STRING}}. If {{START}} is given, then
-the read characters are stored starting at that position.
+
+If {{NUM}} is {{#f}} or not given, then all data up to the end-of-file is
+read, or, in the case of {{write-string}} the whole string is written. If no
+more input is available, {{read-string}} returns {{#!eof}}.
+
+{{read-string!}} reads destructively into the given {{STRING}} argument, but
+never more characters than would fit into {{STRING}}. If {{START}} is given,
+then the read characters are stored starting at that position.
{{read-string!}} returns the actual number of characters read.
Trap