aboutsummaryrefslogtreecommitdiffstats
path: root/lib/nt_ffi.ml
diff options
context:
space:
mode:
authorEstevan Castilho <tevo@riajuu.net>2026-05-30 02:52:21 +0000
committerEstevan Castilho <tevo@riajuu.net>2026-05-30 02:52:21 +0000
commit00365c4a39826bf20d289af7daaa8a41c0aa6ca7 (patch)
tree94d81fc6e0b3704f92ac216b501b51edfddf5e60 /lib/nt_ffi.ml
parent91675d81b8899bbe65f399b71065773aab7f1d13 (diff)
downloadSakura-00365c4a39826bf20d289af7daaa8a41c0aa6ca7.tar.gz
Sakura-00365c4a39826bf20d289af7daaa8a41c0aa6ca7.zip
`Project` plan node
Diffstat (limited to '')
-rw-r--r--lib/nt_ffi.ml20
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/nt_ffi.ml b/lib/nt_ffi.ml
index 8b70150..250ad4a 100644
--- a/lib/nt_ffi.ml
+++ b/lib/nt_ffi.ml
@@ -92,6 +92,9 @@ let rnt_plan_join =
let rnt_plan_take =
fn "rnt_plan_take" (ptr void @-> size_t @-> returning (ptr void))
+let rnt_plan_project =
+ fn "rnt_plan_project" (ptr void @-> ptr (ptr char) @-> returning (ptr void))
+
let rnt_plan_free =
fn "rnt_plan_free" (ptr void @-> returning void)
@@ -133,6 +136,23 @@ let with_out_string (f : char ptr ptr -> int) : int * string option =
if is_null p then (rc, None)
else (rc, Some (consume_cstring p))
+let with_strings_as_char_array
+ (strings : string list)
+ (body : char ptr ptr -> 'a)
+ : 'a =
+ let arr =
+ CArray.make
+ ~initial:(from_voidp char null)
+ (ptr char)
+ (1 + List.length strings)
+ in
+ List.iteri
+ (fun i s -> CArray.set arr i (Ctypes_std_views.char_ptr_of_string s))
+ strings;
+ body (CArray.start arr)
+ (* let pp = allocate (ptr (ptr char)) (from_voidp (ptr char) null) in *)
+
+
(* Converts a void* (returned from open_handle / cursor_open) to nativeint.
Returns None when the pointer is NULL (failure). *)
let ptr_to_opt (p : unit ptr) : nativeint option =