reimplement read-bytevector in scheme using read-bytevector!

This commit is contained in:
Yuichi Nishiwaki 2016-07-11 00:43:15 +09:00
parent 8f4e07d185
commit 2d90c1fb90
2 changed files with 8 additions and 21 deletions

View File

@ -810,6 +810,14 @@
(define (u8-ready? . opt)
#t)
(define (read-bytevector k . opt)
(let ((port (if (null? opt) (current-input-port) (car opt))))
(let ((buf (make-bytevector k)))
(let ((n (read-bytevector! buf port 0 k)))
(if (eof-object? n)
(eof-object)
(bytevector-copy buf 0 n))))))
(define (char-ready? . opt)
#t)

View File

@ -674,26 +674,6 @@ pic_port_peek_u8(pic_state *pic)
}
}
static pic_value
pic_port_read_bytevector(pic_state *pic)
{
pic_value port = pic_stdin(pic);
unsigned char *buf;
int k, i;
pic_get_args(pic, "i|p", &k, &port);
assert_port_profile(port, FILE_READ, "read-bytevector");
buf = pic_blob(pic, pic_blob_value(pic, NULL, k), NULL);
i = pic_fread(pic, buf, sizeof(char), k, port);
if (i == 0) {
return pic_eof_object(pic);
}
return pic_blob_value(pic, buf, i);
}
static pic_value
pic_port_read_bytevector_ip(pic_state *pic)
{
@ -817,7 +797,6 @@ pic_init_port(pic_state *pic)
/* input */
pic_defun(pic, "read-u8", pic_port_read_u8);
pic_defun(pic, "peek-u8", pic_port_peek_u8);
pic_defun(pic, "read-bytevector", pic_port_read_bytevector);
pic_defun(pic, "read-bytevector!", pic_port_read_bytevector_ip);
/* output */