mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-12 23:37:38 +02:00
Correctly differentiate binary/textual ports
This commit is contained in:
parent
c7494d51aa
commit
f91d5b1a30
4 changed files with 26 additions and 6 deletions
|
@ -2,6 +2,10 @@
|
||||||
|
|
||||||
## 0.17 - TBD
|
## 0.17 - TBD
|
||||||
|
|
||||||
|
Bug Fixes
|
||||||
|
|
||||||
|
- Modified `binary-port?` and `textual-port?` to correctly differentiate between binary and textual ports.
|
||||||
|
|
||||||
## 0.16 - March 11, 2020
|
## 0.16 - March 11, 2020
|
||||||
|
|
||||||
Features
|
Features
|
||||||
|
|
|
@ -1100,6 +1100,8 @@ typedef struct {
|
||||||
size_t str_bv_in_mem_buf_len;
|
size_t str_bv_in_mem_buf_len;
|
||||||
} port_type;
|
} port_type;
|
||||||
|
|
||||||
|
#define CYC_BINARY_PORT_FLAG 0x10
|
||||||
|
|
||||||
#define CYC_IO_BUF_LEN 1024
|
#define CYC_IO_BUF_LEN 1024
|
||||||
|
|
||||||
/** Create a new port object in the nursery */
|
/** Create a new port object in the nursery */
|
||||||
|
|
|
@ -4480,12 +4480,16 @@ port_type Cyc_io_open_output_file(void *data, object str)
|
||||||
|
|
||||||
port_type Cyc_io_open_binary_input_file(void *data, object str)
|
port_type Cyc_io_open_binary_input_file(void *data, object str)
|
||||||
{
|
{
|
||||||
return _Cyc_io_open_input_file(data, str, "rb");
|
port_type p = _Cyc_io_open_input_file(data, str, "rb");
|
||||||
|
p.flags |= CYC_BINARY_PORT_FLAG;
|
||||||
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
port_type Cyc_io_open_binary_output_file(void *data, object str)
|
port_type Cyc_io_open_binary_output_file(void *data, object str)
|
||||||
{
|
{
|
||||||
return _Cyc_io_open_output_file(data, str, "wb");
|
port_type p = _Cyc_io_open_output_file(data, str, "wb");
|
||||||
|
p.flags |= CYC_BINARY_PORT_FLAG;
|
||||||
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
object Cyc_io_close_input_port(void *data, object port)
|
object Cyc_io_close_input_port(void *data, object port)
|
||||||
|
|
|
@ -694,12 +694,22 @@
|
||||||
(loop (if chr (cons chr acc) acc)
|
(loop (if chr (cons chr acc) acc)
|
||||||
(- i 1)
|
(- i 1)
|
||||||
(read-char port))))))))
|
(read-char port))))))))
|
||||||
;; TODO: the following procedures should be a bit smarter, but we would
|
(define-c _binary-port?
|
||||||
;; need to track binary/text as part of port_type
|
"(void *data, int argc, closure _, object k, object obj)"
|
||||||
|
" object rv = boolean_f;
|
||||||
|
port_type *p = (port_type *)obj;
|
||||||
|
if (p->flags & CYC_BINARY_PORT_FLAG) {
|
||||||
|
rv = boolean_t;
|
||||||
|
}
|
||||||
|
return_closcall1(data, k, rv); ")
|
||||||
|
|
||||||
(define (binary-port? obj)
|
(define (binary-port? obj)
|
||||||
(port? obj))
|
(and (port? obj)
|
||||||
|
(_binary-port? obj))
|
||||||
|
)
|
||||||
(define (textual-port? obj)
|
(define (textual-port? obj)
|
||||||
(port? obj))
|
(and (port? obj)
|
||||||
|
(not (binary-port? obj))))
|
||||||
;;
|
;;
|
||||||
(define (flush-output-port . port)
|
(define (flush-output-port . port)
|
||||||
(if (null? port)
|
(if (null? port)
|
||||||
|
|
Loading…
Add table
Reference in a new issue