From 0d5e71c5bb3a3fdb13d378358e01b7d75f8e14b1 Mon Sep 17 00:00:00 2001 From: Estevan Castilho Date: Thu, 23 Apr 2026 02:05:25 +0000 Subject: Some LMDB bindings --- flake.nix | 4 ++++ lib/dune | 5 ++++- lib/external/lmdb.ml | 24 ++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 lib/external/lmdb.ml diff --git a/flake.nix b/flake.nix index 8b8abaf..1ba10eb 100644 --- a/flake.nix +++ b/flake.nix @@ -82,6 +82,8 @@ buildInputs = [ ppx_protocol_conv_xml_light ppx_protocol_conv ] ++ (with ocamlPackages; [ + ctypes + ctypes-foreign sha data-encoding ppx_inline_test @@ -237,6 +239,8 @@ ocamlPackages.utop # Libraries # ocamlPackages.menhir + ocamlPackages.ctypes + ocamlPackages.ctypes-foreign ocamlPackages.sha ocamlPackages.data-encoding ocamlPackages.ppx_inline_test diff --git a/lib/dune b/lib/dune index 9a7cd0b..a09ed21 100644 --- a/lib/dune +++ b/lib/dune @@ -6,6 +6,8 @@ (libraries dynlink sakura_prl_api + ctypes + ctypes-foreign sha data-encoding lwt @@ -15,4 +17,5 @@ ppx_protocol_conv_xml_light sexplib) (preprocess - (pps ppx_deriving.show ppx_sexp_conv ppx_protocol_conv))) + (pps ppx_deriving.show ppx_sexp_conv ppx_protocol_conv)) + (flags :standard -cclib -llmdb)) diff --git a/lib/external/lmdb.ml b/lib/external/lmdb.ml new file mode 100644 index 0000000..d2e6be0 --- /dev/null +++ b/lib/external/lmdb.ml @@ -0,0 +1,24 @@ +open Ctypes +open PosixTypes +open Foreign + +type mdb_result = Success | Failure of int + +let mdb_result_of_int = function + | 0 -> Success + | x -> Failure x + +let int_of_mdb_result = function + | Success -> 0 + | Failure x -> x + +let mdb_mode_t = mode_t + +let mdb_result = view ~read:mdb_result_of_int ~write:int_of_mdb_result int + +let mdb_env = ptr Void + +let mdb_env_create = foreign "mdb_env_create" (ptr mdb_env @-> returning mdb_result) + +let mdb_env_open = foreign "mdb_env_open" (ptr mdb_env @-> string @-> uint @-> mdb_mode_t @-> returning mdb_result) +let mdb_env_close = foreign "mdb_env_close" (ptr mdb_env @-> returning Void) -- cgit v1.2.3