From 2d90c1fb906570d1e5e5cfef8d9719f1bebe4c7f Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Mon, 11 Jul 2016 00:43:15 +0900 Subject: [PATCH] reimplement read-bytevector in scheme using read-bytevector! --- contrib/20.r7rs/scheme/base.scm | 8 ++++++++ extlib/benz/port.c | 21 --------------------- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/contrib/20.r7rs/scheme/base.scm b/contrib/20.r7rs/scheme/base.scm index e0727fc2..45cbdac9 100644 --- a/contrib/20.r7rs/scheme/base.scm +++ b/contrib/20.r7rs/scheme/base.scm @@ -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) diff --git a/extlib/benz/port.c b/extlib/benz/port.c index 6e9bb53c..0f31dc44 100644 --- a/extlib/benz/port.c +++ b/extlib/benz/port.c @@ -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 */