diff options
author | Andy Wingo <wingo@pobox.com> | 2016-05-10 15:37:42 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2016-05-10 15:37:42 +0200 |
commit | 3ccfa213c10af1db748597123ee982b4e4069275 (patch) | |
tree | a1dfcee4128623ce21fadb52a6c54058d0b6895d | |
parent | 9c02ede07e0f614440ec4741ce925ef00a1a7e1d (diff) | |
download | guile-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.scm | 37 |
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))) |