[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 04/05: scm_i_make_transcoded_port: fix mode for input/ou
From: |
Rob Browning |
Subject: |
[Guile-commits] 04/05: scm_i_make_transcoded_port: fix mode for input/output ports |
Date: |
Sun, 17 Jan 2021 15:05:56 -0500 (EST) |
rlb pushed a commit to branch master
in repository guile.
commit d0d1f68794c2971bd230aa63f44cbf7a8ab6ab0d
Author: Rob Browning <rlb@defaultvalue.org>
AuthorDate: Sun Oct 4 14:05:29 2020 -0500
scm_i_make_transcoded_port: fix mode for input/output ports
* libguile/r6rs-ports.c (scm_i_make_transcoded_ports): make sure to
include SCM_RDNG for input/output ports.
Thanks to Göran Weinholt for reporting the problem.
Closes: 41045
---
libguile/r6rs-ports.c | 4 ++--
test-suite/tests/r6rs-ports.test | 26 ++++++++++++++++++++++++++
2 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/libguile/r6rs-ports.c b/libguile/r6rs-ports.c
index 445ae54..49ca053 100644
--- a/libguile/r6rs-ports.c
+++ b/libguile/r6rs-ports.c
@@ -1168,8 +1168,8 @@ SCM_DEFINE (scm_i_make_transcoded_port,
if (scm_is_true (scm_output_port_p (port)))
mode |= SCM_WRTNG;
- else if (scm_is_true (scm_input_port_p (port)))
- mode |= SCM_RDNG;
+ if (scm_is_true (scm_input_port_p (port)))
+ mode |= SCM_RDNG;
result = make_transcoded_port (port, mode);
diff --git a/test-suite/tests/r6rs-ports.test b/test-suite/tests/r6rs-ports.test
index 5b46ccc..4d1981d 100644
--- a/test-suite/tests/r6rs-ports.test
+++ b/test-suite/tests/r6rs-ports.test
@@ -919,6 +919,32 @@ not `set-port-position!'"
(with-test-prefix "8.2.6 Input and output ports"
+ (define (check-transcoded-port-mode make-port pred)
+ (let ((p (make-port "/dev/null" (file-options no-fail))))
+ (dynamic-wind
+ (lambda () #t)
+ (lambda ()
+ (set! p (transcoded-port p (native-transcoder)))
+ (pred p))
+ (lambda () (close-port p)))))
+
+ (pass-if "transcoded-port preserves input mode"
+ (check-transcoded-port-mode open-file-input-port
+ (lambda (p)
+ (and (input-port? p)
+ (not (output-port? p))))))
+
+ (pass-if "transcoded-port preserves output mode"
+ (check-transcoded-port-mode open-file-output-port
+ (lambda (p)
+ (and (not (input-port? p))
+ (output-port? p)))))
+
+ (pass-if "transcoded-port preserves input/output mode"
+ (check-transcoded-port-mode open-file-input/output-port
+ (lambda (p)
+ (and (input-port? p) (output-port? p)))))
+
(pass-if "transcoded-port [output]"
(let ((s "Hello\nÄÖÜ"))
(bytevector=?
- [Guile-commits] branch master updated (55ebf1b -> b5ecfdd), Rob Browning, 2021/01/17
- [Guile-commits] 01/05: doc: Fix composition describing scm_reverse_list_to_string, Rob Browning, 2021/01/17
- [Guile-commits] 02/05: Replace a line which was accidentally removed., Rob Browning, 2021/01/17
- [Guile-commits] 03/05: (scheme base) member: return #f, not (), for no match, Rob Browning, 2021/01/17
- [Guile-commits] 04/05: scm_i_make_transcoded_port: fix mode for input/output ports,
Rob Browning <=
- [Guile-commits] 05/05: Fix "display" typo in make-thread and begin-thread docs, Rob Browning, 2021/01/17