mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-02 21:10:27 +02:00
Add get-string-n' and
get-string-n!' for R6RS ports
* libguile/r6rs-ports.c (scm_get_string_n_x): Implement `get-string-n!' in C for efficiency. * libguile/r6rs-ports.h: Add prototype for this function. * module/ice-9/binary-ports.scm: Export `get-string-n!'. * module/rnrs/io/ports.scm (get-string-n): Implement based on `get-string-n!'. Export both `get-string-n!' and `get-string-n'. * module/rnrs.scm: Also export these. * test-suite/tests/r6rs-ports.test (8.2.9 Textual input): Add a few tests for `get-string-n' and `get-string-n!'. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
parent
ca33b501a9
commit
a6c377f7d8
6 changed files with 78 additions and 5 deletions
|
@ -37,6 +37,7 @@
|
|||
get-bytevector-n!
|
||||
get-bytevector-some
|
||||
get-bytevector-all
|
||||
get-string-n!
|
||||
put-u8
|
||||
put-bytevector
|
||||
open-bytevector-output-port
|
||||
|
|
|
@ -182,7 +182,8 @@
|
|||
make-custom-textual-output-port
|
||||
call-with-string-output-port
|
||||
flush-output-port put-string
|
||||
get-char get-datum get-line get-string-all lookahead-char
|
||||
get-char get-datum get-line get-string-all get-string-n get-string-n!
|
||||
lookahead-char
|
||||
put-char put-datum put-string
|
||||
standard-input-port standard-output-port standard-error-port
|
||||
|
||||
|
|
|
@ -68,8 +68,9 @@
|
|||
put-u8 put-bytevector
|
||||
|
||||
;; textual input
|
||||
get-char get-datum get-line get-string-all lookahead-char
|
||||
|
||||
get-char get-datum get-line get-string-all get-string-n get-string-n!
|
||||
lookahead-char
|
||||
|
||||
;; textual output
|
||||
put-char put-datum put-string
|
||||
|
||||
|
@ -386,6 +387,17 @@ return the characters accumulated in that port."
|
|||
(define (get-string-all port)
|
||||
(with-i/o-decoding-error (read-delimited "" port 'concat)))
|
||||
|
||||
(define (get-string-n port count)
|
||||
"Read up to @var{count} characters from @var{port}.
|
||||
If no characters could be read before encountering the end of file,
|
||||
return the end-of-file object, otherwise return a string containing
|
||||
the characters read."
|
||||
(let* ((s (make-string count))
|
||||
(rv (get-string-n! port s 0 count)))
|
||||
(cond ((eof-object? rv) rv)
|
||||
((= rv count) s)
|
||||
(else (substring/shared s 0 rv)))))
|
||||
|
||||
(define (lookahead-char port)
|
||||
(with-i/o-decoding-error (peek-char port)))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue