summaryrefslogtreecommitdiffstats
path: root/ffi.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-05-19 22:11:50 -0700
committerKaz Kylheku <kaz@kylheku.com>2017-05-19 22:11:50 -0700
commit12d65cff8c48ac1f86b056f542296adbc1fd3651 (patch)
tree5f983a6dfd2af6f483aacb5cb516a018a986f133 /ffi.c
parentf4c156db5e4505fc1a18ae7d4a6597b656a20aa2 (diff)
downloadtxr-12d65cff8c48ac1f86b056f542296adbc1fd3651.tar.gz
txr-12d65cff8c48ac1f86b056f542296adbc1fd3651.tar.bz2
txr-12d65cff8c48ac1f86b056f542296adbc1fd3651.zip
ffi: new function, carray-cptr.
* ffi.c (carray_cptr): New function. (ffi_init): Registered intrinsic. * ffi.h (carray_cptr): Declared. * txr.1: Documented.
Diffstat (limited to 'ffi.c')
-rw-r--r--ffi.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/ffi.c b/ffi.c
index 0f0129dc..72d3ae35 100644
--- a/ffi.c
+++ b/ffi.c
@@ -2615,6 +2615,14 @@ val carray_buf(val buf, val type)
return make_carray(type, data, nelem, buf);
}
+val carray_cptr(val cptr, val type, val len)
+{
+ mem_t *data = cptr_get(cptr);
+ cnum nelem = c_num(default_arg(len, negone));
+ (void) ffi_type_struct(type);
+ return make_carray(type, data, nelem, 0);
+}
+
val vec_carray(val carray, val null_term_p)
{
val nt_p = default_null_arg(null_term_p);
@@ -2744,6 +2752,7 @@ void ffi_init(void)
reg_fun(intern(lit("carray-vec"), user_package), func_n3o(carray_vec, 2));
reg_fun(intern(lit("carray-blank"), user_package), func_n2(carray_blank));
reg_fun(intern(lit("carray-buf"), user_package), func_n2(carray_buf));
+ reg_fun(intern(lit("carray-cptr"), user_package), func_n3o(carray_cptr, 2));
reg_fun(intern(lit("vec-carray"), user_package), func_n2o(vec_carray, 1));
reg_fun(intern(lit("list-carray"), user_package), func_n2o(list_carray, 1));
reg_fun(intern(lit("carray-ref"), user_package), func_n2(carray_ref));