aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorEstevan Castilho <tevo@riajuu.net>2026-04-23 02:05:25 +0000
committerEstevan Castilho <tevo@riajuu.net>2026-04-30 00:04:34 +0000
commit0d5e71c5bb3a3fdb13d378358e01b7d75f8e14b1 (patch)
treef77c92191c64581018a2e35cf0b0a1c28b63d8b3 /lib
parent35c7bf1ff874b0a75b810cf889692656d97abf76 (diff)
downloadSakura-0d5e71c5bb3a3fdb13d378358e01b7d75f8e14b1.tar.gz
Sakura-0d5e71c5bb3a3fdb13d378358e01b7d75f8e14b1.zip
Some LMDB bindings
Diffstat (limited to 'lib')
-rw-r--r--lib/dune5
-rw-r--r--lib/external/lmdb.ml24
2 files changed, 28 insertions, 1 deletions
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)