diff options
-rw-r--r-- | buf.c | 6 | ||||
-rw-r--r-- | buf.h | 1 | ||||
-rw-r--r-- | ffi.c | 2 |
3 files changed, 8 insertions, 1 deletions
@@ -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); @@ -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 @@ -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, |