use pic_blob_value
This commit is contained in:
parent
126989e4ec
commit
0a715e4916
|
@ -263,8 +263,7 @@ pic_socket_socket_recv(pic_state *pic)
|
||||||
pic_errorf(pic, "%s", strerror(errno));
|
pic_errorf(pic, "%s", strerror(errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
bv = pic_make_blob(pic, len);
|
bv = pic_blob_value(pic, buf, len);
|
||||||
memcpy(bv->data, buf, len);
|
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|
||||||
return pic_obj_value(bv);
|
return pic_obj_value(bv);
|
||||||
|
|
|
@ -5,13 +5,16 @@
|
||||||
#include "picrin.h"
|
#include "picrin.h"
|
||||||
|
|
||||||
struct pic_blob *
|
struct pic_blob *
|
||||||
pic_make_blob(pic_state *pic, int len)
|
pic_blob_value(pic_state *pic, const unsigned char *buf, int len)
|
||||||
{
|
{
|
||||||
struct pic_blob *bv;
|
struct pic_blob *bv;
|
||||||
|
|
||||||
bv = (struct pic_blob *)pic_obj_alloc(pic, sizeof(struct pic_blob), PIC_TYPE_BLOB);
|
bv = (struct pic_blob *)pic_obj_alloc(pic, sizeof(struct pic_blob), PIC_TYPE_BLOB);
|
||||||
bv->data = pic_malloc(pic, len);
|
bv->data = pic_malloc(pic, len);
|
||||||
bv->len = len;
|
bv->len = len;
|
||||||
|
if (buf) {
|
||||||
|
memcpy(bv->data, buf, len);
|
||||||
|
}
|
||||||
return bv;
|
return bv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +38,7 @@ pic_blob_bytevector(pic_state *pic)
|
||||||
|
|
||||||
pic_get_args(pic, "*", &argc, &argv);
|
pic_get_args(pic, "*", &argc, &argv);
|
||||||
|
|
||||||
blob = pic_make_blob(pic, argc);
|
blob = pic_blob_value(pic, 0, argc);
|
||||||
|
|
||||||
data = blob->data;
|
data = blob->data;
|
||||||
|
|
||||||
|
@ -63,7 +66,7 @@ pic_blob_make_bytevector(pic_state *pic)
|
||||||
if (b < 0 || b > 255)
|
if (b < 0 || b > 255)
|
||||||
pic_errorf(pic, "byte out of range");
|
pic_errorf(pic, "byte out of range");
|
||||||
|
|
||||||
blob = pic_make_blob(pic, k);
|
blob = pic_blob_value(pic, 0, k);
|
||||||
for (i = 0; i < k; ++i) {
|
for (i = 0; i < k; ++i) {
|
||||||
blob->data[i] = (unsigned char)b;
|
blob->data[i] = (unsigned char)b;
|
||||||
}
|
}
|
||||||
|
@ -157,7 +160,7 @@ pic_blob_bytevector_copy(pic_state *pic)
|
||||||
pic_errorf(pic, "make-bytevector: end index must not be less than start index");
|
pic_errorf(pic, "make-bytevector: end index must not be less than start index");
|
||||||
}
|
}
|
||||||
|
|
||||||
to = pic_make_blob(pic, end - start);
|
to = pic_blob_value(pic, 0, end - start);
|
||||||
while (start < end) {
|
while (start < end) {
|
||||||
to->data[i++] = from->data[start++];
|
to->data[i++] = from->data[start++];
|
||||||
}
|
}
|
||||||
|
@ -180,7 +183,7 @@ pic_blob_bytevector_append(pic_state *pic)
|
||||||
len += pic_blob_ptr(argv[i])->len;
|
len += pic_blob_ptr(argv[i])->len;
|
||||||
}
|
}
|
||||||
|
|
||||||
blob = pic_make_blob(pic, len);
|
blob = pic_blob_value(pic, 0, len);
|
||||||
|
|
||||||
len = 0;
|
len = 0;
|
||||||
for (i = 0; i < argc; ++i) {
|
for (i = 0; i < argc; ++i) {
|
||||||
|
@ -202,7 +205,7 @@ pic_blob_list_to_bytevector(pic_state *pic)
|
||||||
|
|
||||||
pic_get_args(pic, "o", &list);
|
pic_get_args(pic, "o", &list);
|
||||||
|
|
||||||
blob = pic_make_blob(pic, pic_length(pic, list));
|
blob = pic_blob_value(pic, 0, pic_length(pic, list));
|
||||||
|
|
||||||
data = blob->data;
|
data = blob->data;
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,6 @@ struct pic_blob {
|
||||||
|
|
||||||
#define pic_blob_ptr(v) ((struct pic_blob *)pic_obj_ptr(v))
|
#define pic_blob_ptr(v) ((struct pic_blob *)pic_obj_ptr(v))
|
||||||
|
|
||||||
struct pic_blob *pic_make_blob(pic_state *, int);
|
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -546,8 +546,7 @@ pic_port_get_output_bytevector(pic_state *pic)
|
||||||
|
|
||||||
s = port->file->vtable.cookie;
|
s = port->file->vtable.cookie;
|
||||||
|
|
||||||
blob = pic_make_blob(pic, s->end);
|
blob = pic_blob_value(pic, (unsigned char *)s->buf, s->end);
|
||||||
memcpy(blob->data, s->buf, s->end);
|
|
||||||
|
|
||||||
return pic_obj_value(blob);
|
return pic_obj_value(blob);
|
||||||
}
|
}
|
||||||
|
@ -717,7 +716,7 @@ pic_port_read_blob(pic_state *pic)
|
||||||
|
|
||||||
assert_port_profile(port, PIC_PORT_IN | PIC_PORT_BINARY, "read-bytevector");
|
assert_port_profile(port, PIC_PORT_IN | PIC_PORT_BINARY, "read-bytevector");
|
||||||
|
|
||||||
blob = pic_make_blob(pic, k);
|
blob = pic_blob_value(pic, 0, k);
|
||||||
|
|
||||||
i = xfread(pic, blob->data, sizeof(char), k, port->file);
|
i = xfread(pic, blob->data, sizeof(char), k, port->file);
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
|
|
|
@ -497,7 +497,7 @@ static pic_value
|
||||||
read_blob(pic_state *pic, struct pic_port *port, int c)
|
read_blob(pic_state *pic, struct pic_port *port, int c)
|
||||||
{
|
{
|
||||||
int nbits, n;
|
int nbits, n;
|
||||||
int len, i;
|
int len;
|
||||||
unsigned char *dat;
|
unsigned char *dat;
|
||||||
struct pic_blob *blob;
|
struct pic_blob *blob;
|
||||||
|
|
||||||
|
@ -529,10 +529,7 @@ read_blob(pic_state *pic, struct pic_port *port, int c)
|
||||||
c = next(pic, port);
|
c = next(pic, port);
|
||||||
}
|
}
|
||||||
|
|
||||||
blob = pic_make_blob(pic, len);
|
blob = pic_blob_value(pic, dat, len);
|
||||||
for (i = 0; i < len; ++i) {
|
|
||||||
blob->data[i] = dat[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
pic_free(pic, dat);
|
pic_free(pic, dat);
|
||||||
return pic_obj_value(blob);
|
return pic_obj_value(blob);
|
||||||
|
|
Loading…
Reference in New Issue