summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2016-05-10 15:37:42 +0200
committerAndy Wingo <wingo@pobox.com>2016-05-10 15:37:42 +0200
commit3ccfa213c10af1db748597123ee982b4e4069275 (patch)
treea1dfcee4128623ce21fadb52a6c54058d0b6895d
parent9c02ede07e0f614440ec4741ce925ef00a1a7e1d (diff)
downloadguile-3ccfa213c10af1db748597123ee982b4e4069275.tar.gz
peek-char-and-len/iconv uses both returns from fill-input
* module/ice-9/ports.scm (peek-char-and-len/iconv): Use buffered value from fill-input.
-rw-r--r--module/ice-9/ports.scm37
1 files changed, 19 insertions, 18 deletions
diff --git a/module/ice-9/ports.scm b/module/ice-9/ports.scm
index e672b2c9b..742e7025e 100644
--- a/module/ice-9/ports.scm
+++ b/module/ice-9/ports.scm
@@ -419,24 +419,25 @@ interpret its input and output."
(define (peek-char-and-len/iconv port first-byte)
(let lp ((prev-input-size 0))
- (let* ((input-size (1+ prev-input-size))
- (buf (fill-input port input-size))
- (cur (port-buffer-cur buf)))
- (cond
- ((< (- (port-buffer-end buf) cur) input-size)
- ;; Buffer failed to fill; EOF, possibly premature.
- (cond
- ((zero? prev-input-size)
- (values the-eof-object 0))
- ((eq? (port-conversion-strategy port) 'substitute)
- (values #\? prev-input-size))
- (else
- (decoding-error "peek-char" port))))
- ((port-decode-char port (port-buffer-bytevector buf) cur input-size)
- => (lambda (char)
- (values char input-size)))
- (else
- (lp input-size))))))
+ (let ((input-size (1+ prev-input-size)))
+ (call-with-values (lambda () (fill-input port input-size))
+ (lambda (buf buffered)
+ (cond
+ ((< buffered input-size)
+ ;; Buffer failed to fill; EOF, possibly premature.
+ (cond
+ ((zero? prev-input-size)
+ (values the-eof-object 0))
+ ((eq? (port-conversion-strategy port) 'substitute)
+ (values #\? prev-input-size))
+ (else
+ (decoding-error "peek-char" port))))
+ ((port-decode-char port (port-buffer-bytevector buf)
+ (port-buffer-cur buf) input-size)
+ => (lambda (char)
+ (values char input-size)))
+ (else
+ (lp input-size))))))))
(define (peek-char-and-len port)
(let ((first-byte (peek-byte port)))