Make sure binary ports pass `binary-port?' regardless of the locale.
* libguile/r6rs-ports.c (make_bip, make_cbip, make_bop, make_cbop):
Set `c_port->encoding' to NULL.
* test-suite/tests/r6rs-ports.test ("7.2.7 Input
Ports")["bytevector-input-port is binary"]: New test.
("7.2.7 Input Ports")["make-custom-binary-input-port"]: Make sure PORT
passes `binary-port?' and `input-port?'.
("8.2.10 Output ports")["bytevector-output-port is binary"]: New test.
["make-custom-binary-output"]: Rename to...
["make-custom-binary-output-port"]: ... this.
* test-suite/tests/ports.test ("string ports")["read-char, wrong
encoding, error", "read-char, wrong encoding, escape", "read-char,
wrong encoding, substitute", "peek-char, wrong encoding, error"]: Use
`set-port-encoding!' instead of `%default-port-encoding' to set the
encoding of bytevector input ports.
* test-suite/tests/rdelim.test ("read-line")["decoding error", "decoding
error, substitute"]: Likewise.
* doc/ref/api-io.texi (R6RS Port Manipulation): Document `binary-port?'
and `textual-port?'.
* doc/ref/r6rs.texi (R6RS Incompatibilities): Mention the soft
distinction between textual and binary ports.
This commit is contained in:
parent
969bb92e9b
commit
96128014bf
6 changed files with 71 additions and 20 deletions
|
|
@ -87,6 +87,10 @@ make_bip (SCM bv)
|
|||
scm_i_scm_pthread_mutex_lock (&scm_i_port_table_mutex);
|
||||
|
||||
port = scm_new_port_table_entry (bytevector_input_port_type);
|
||||
c_port = SCM_PTAB_ENTRY (port);
|
||||
|
||||
/* Match the expectation of `binary-port?'. */
|
||||
c_port->encoding = NULL;
|
||||
|
||||
/* Prevent BV from being GC'd. */
|
||||
SCM_SETSTREAM (port, SCM_UNPACK (bv));
|
||||
|
|
@ -95,7 +99,6 @@ make_bip (SCM bv)
|
|||
c_bv = (char *) SCM_BYTEVECTOR_CONTENTS (bv);
|
||||
c_len = SCM_BYTEVECTOR_LENGTH (bv);
|
||||
|
||||
c_port = SCM_PTAB_ENTRY (port);
|
||||
c_port->read_pos = c_port->read_buf = (unsigned char *) c_bv;
|
||||
c_port->read_end = (unsigned char *) c_bv + c_len;
|
||||
c_port->read_buf_size = c_len;
|
||||
|
|
@ -312,12 +315,15 @@ make_cbip (SCM read_proc, SCM get_position_proc,
|
|||
scm_i_pthread_mutex_lock (&scm_i_port_table_mutex);
|
||||
|
||||
port = scm_new_port_table_entry (custom_binary_input_port_type);
|
||||
c_port = SCM_PTAB_ENTRY (port);
|
||||
|
||||
/* Match the expectation of `binary-port?'. */
|
||||
c_port->encoding = NULL;
|
||||
|
||||
/* Attach it the method vector. */
|
||||
SCM_SETSTREAM (port, SCM_UNPACK (method_vector));
|
||||
|
||||
/* Have the port directly access the buffer (bytevector). */
|
||||
c_port = SCM_PTAB_ENTRY (port);
|
||||
c_port->read_pos = c_port->read_buf = (unsigned char *) c_bv;
|
||||
c_port->read_end = (unsigned char *) c_bv;
|
||||
c_port->read_buf_size = c_len;
|
||||
|
|
@ -827,11 +833,14 @@ make_bop (void)
|
|||
scm_i_pthread_mutex_lock (&scm_i_port_table_mutex);
|
||||
|
||||
port = scm_new_port_table_entry (bytevector_output_port_type);
|
||||
c_port = SCM_PTAB_ENTRY (port);
|
||||
|
||||
/* Match the expectation of `binary-port?'. */
|
||||
c_port->encoding = NULL;
|
||||
|
||||
buf = (scm_t_bop_buffer *) scm_gc_malloc (sizeof (* buf), SCM_GC_BOP);
|
||||
bop_buffer_init (buf);
|
||||
|
||||
c_port = SCM_PTAB_ENTRY (port);
|
||||
c_port->write_buf = c_port->write_pos = c_port->write_end = NULL;
|
||||
c_port->write_buf_size = 0;
|
||||
|
||||
|
|
@ -983,12 +992,15 @@ make_cbop (SCM write_proc, SCM get_position_proc,
|
|||
scm_i_pthread_mutex_lock (&scm_i_port_table_mutex);
|
||||
|
||||
port = scm_new_port_table_entry (custom_binary_output_port_type);
|
||||
c_port = SCM_PTAB_ENTRY (port);
|
||||
|
||||
/* Match the expectation of `binary-port?'. */
|
||||
c_port->encoding = NULL;
|
||||
|
||||
/* Attach it the method vector. */
|
||||
SCM_SETSTREAM (port, SCM_UNPACK (method_vector));
|
||||
|
||||
/* Have the port directly access the buffer (bytevector). */
|
||||
c_port = SCM_PTAB_ENTRY (port);
|
||||
c_port->write_buf = c_port->write_pos = c_port->write_end = NULL;
|
||||
c_port->write_buf_size = c_port->read_buf_size = 0;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue