summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--buf.c6
-rw-r--r--buf.h1
-rw-r--r--ffi.c2
3 files changed, 8 insertions, 1 deletions
diff --git a/buf.c b/buf.c
index 58cd4177..661514be 100644
--- a/buf.c
+++ b/buf.c
@@ -204,6 +204,12 @@ mem_t *buf_get(val buf, val self)
return b->data;
}
+mem_t **buf_addr_of(val buf, val self)
+{
+ struct buf *b = buf_handle(buf, self);
+ return &b->data;
+}
+
void buf_fill(val buf, mem_t *src, val self)
{
struct buf *b = buf_handle(buf, self);
diff --git a/buf.h b/buf.h
index 8102fff8..b65f7037 100644
--- a/buf.h
+++ b/buf.h
@@ -32,6 +32,7 @@ val buf_trim(val buf);
val buf_set_length(val obj, val len, val init_val);
val length_buf(val buf);
mem_t *buf_get(val buf, val self);
+mem_t **buf_addr_of(val buf, val self);
void buf_fill(val buf, mem_t *src, val self);
#if HAVE_I8
diff --git a/ffi.c b/ffi.c
index aa55a39e..cad0376d 100644
--- a/ffi.c
+++ b/ffi.c
@@ -642,7 +642,7 @@ static val ffi_buf_get(struct txr_ffi_type *tft, mem_t *src, val self)
static mem_t *ffi_buf_alloc(struct txr_ffi_type *tft, val buf, val self)
{
(void) tft;
- return buf_get(buf, self);
+ return coerce(mem_t *, buf_addr_of(buf, self));
}
static void ffi_ptr_walk(struct txr_ffi_type *tft, mem_t *ctx,