mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-01 12:20:26 +02:00
Custom binary input ports support 'setvbuf'.
* libguile/r6rs-ports.c (CBIP_BUFFER_SIZE): Adjust comment. Set to 8KiB. (SCM_SET_CBIP_BYTEVECTOR): New macro. (cbip_setvbuf): New function. (make_cbip): Set PORT's 'setvbuf' internal field. (cbip_fill_input): Check whether PORT is buffered. When unbuffered, check whether BV can hold C_REQUESTED bytes, and allocate a new bytevector if not; copy the data back from BV to c_port->read_pos. Remove 'again' label, and don't loop there. * test-suite/tests/r6rs-ports.test ("7.2.7 Input Ports")["custom binary input port unbuffered & 'port-position'", "custom binary input port unbuffered & 'read!' calls", "custom binary input port, unbuffered then buffered", "custom binary input port, buffered then unbuffered"]: New tests. * doc/ref/api-io.texi (R6RS Binary Input): Document the buffering of custom binary input ports, and link to 'setvbuf'.
This commit is contained in:
parent
122f24cc8a
commit
8ca97482b0
3 changed files with 206 additions and 17 deletions
|
@ -1816,6 +1816,10 @@ indicating the position of the next byte is to read.
|
|||
Finally, if @var{close} is not @code{#f}, it must be a thunk. It is
|
||||
invoked when the custom binary input port is closed.
|
||||
|
||||
The returned port is fully buffered by default, but its buffering mode
|
||||
can be changed using @code{setvbuf} (@pxref{Ports and File Descriptors,
|
||||
@code{setvbuf}}).
|
||||
|
||||
Using a custom binary input port, the @code{open-bytevector-input-port}
|
||||
procedure could be implemented as follows:
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue