From bd3e3b71de1f03806bfa8eeebb578ea120822401 Mon Sep 17 00:00:00 2001 From: Jeremy Yallop Date: Mon, 23 Dec 2019 19:30:09 +0000 Subject: [PATCH] add CTYPES_PTR_OF_OCAML_BYTES --- src/cstubs/cstubs_generate_c.ml | 7 ++++++- src/ctypes/ctypes_cstubs_internals.h | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/cstubs/cstubs_generate_c.ml b/src/cstubs/cstubs_generate_c.ml index 137de593..a12e80a4 100644 --- a/src/cstubs/cstubs_generate_c.ml +++ b/src/cstubs/cstubs_generate_c.ml @@ -77,6 +77,11 @@ struct (value @-> returning (ptr void)), [x]) + let bytes_to_ptr : cexp -> ccomp = + fun x -> `App (reader "CTYPES_PTR_OF_OCAML_BYTES" + (value @-> returning (ptr void)), + [x]) + let float_array_to_ptr : cexp -> ccomp = fun x -> `App (reader "CTYPES_PTR_OF_FLOAT_ARRAY" (value @-> returning (ptr void)), @@ -143,7 +148,7 @@ struct | Array _ -> report_unpassable "arrays" | Bigarray _ -> report_unpassable "bigarrays" | OCaml String -> Some (string_to_ptr x) - | OCaml Bytes -> Some (string_to_ptr x) + | OCaml Bytes -> Some (bytes_to_ptr x) | OCaml FloatArray -> Some (float_array_to_ptr x) let prj ty x = prj ty ~orig:ty x diff --git a/src/ctypes/ctypes_cstubs_internals.h b/src/ctypes/ctypes_cstubs_internals.h index ea95d1ab..b293177c 100644 --- a/src/ctypes/ctypes_cstubs_internals.h +++ b/src/ctypes/ctypes_cstubs_internals.h @@ -18,6 +18,14 @@ #include #define CTYPES_PTR_OF_OCAML_STRING(s) \ (String_val(Field(s, 1)) + Long_val(Field(s, 0))) + +#ifdef Bytes_val +#define CTYPES_PTR_OF_OCAML_BYTES(s) \ + (Bytes_val(Field(s, 1)) + Long_val(Field(s, 0))) +#else +#define CTYPES_PTR_OF_OCAML_BYTES(s) CTYPES_PTR_OF_OCAML_STRING(s) +#endif + #define Ctypes_val_char(c) \ (Val_int((c + 256) % 256)) #define CTYPES_PAIR_WITH_ERRNO(v)