summaryrefslogtreecommitdiff
path: root/dev-ml/ocamlfuse/files/ocamlfuse-2.7.1_p7-Wint.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dev-ml/ocamlfuse/files/ocamlfuse-2.7.1_p7-Wint.patch')
-rw-r--r--dev-ml/ocamlfuse/files/ocamlfuse-2.7.1_p7-Wint.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/dev-ml/ocamlfuse/files/ocamlfuse-2.7.1_p7-Wint.patch b/dev-ml/ocamlfuse/files/ocamlfuse-2.7.1_p7-Wint.patch
new file mode 100644
index 000000000000..8f1e7f405bf6
--- /dev/null
+++ b/dev-ml/ocamlfuse/files/ocamlfuse-2.7.1_p7-Wint.patch
@@ -0,0 +1,67 @@
+--- a/lib/Fuse_util.c 2024-05-31 19:58:34.910818884 +0200
++++ b/lib/Fuse_util.c 2024-05-31 20:25:27.021700407 +0200
+@@ -293,7 +293,6 @@
+ }
+
+ #define FOR_ALL_OPS(MACRO) \
+- MACRO(init) \
+ MACRO(getattr) \
+ MACRO(readlink) \
+ MACRO(readdir) \
+@@ -344,12 +343,14 @@
+ #define SET_NULL_OP(OPNAME) .OPNAME = NULL,
+
+ static struct fuse_operations ops = {
++ SET_NULL_OP(init)
+ FOR_ALL_OPS(SET_NULL_OP)
+ };
+
+ static value * ocaml_list_length=NULL;
+
+ #define DECLARE_OP_CLOSURE(OPNAME) static value * OPNAME##_closure=NULL;
++DECLARE_OP_CLOSURE(init)
+ FOR_ALL_OPS(DECLARE_OP_CLOSURE)
+
+ #define init_ARGS (struct fuse_conn_info *conn)
+@@ -593,6 +594,33 @@
+ #define removexattr_CB vpath = copy_string(path); vres=callback2(*removexattr_closure,vpath,copy_string(name));
+ #define removexattr_RES
+
++static void *gm281_ops_init(struct fuse_conn_info *conn)
++{
++ CAMLparam0();
++ CAMLlocal4(vstring, vpath, vres, vtmp);
++ intptr_t res = -1;
++ vres=callback(*init_closure,Val_unit);
++ if (Tag_val(vres)==1) /* Result is not Bad */
++ {
++ res=0;
++ }
++ else
++ {
++ if (Is_block(Field(vres,0))) /* This is EUNKNOWNERR of int in ocaml */
++ res=-Int_val(Field(Field(vres,0),0));
++ else res=-ml2c_unix_error(Int_val(Field(vres,0)));
++ }
++ CAMLreturnT(void *, (void *)res);
++}
++
++static void *ops_init(struct fuse_conn_info *conn)
++{
++ leave_blocking_section();
++ void *ret = gm281_ops_init(conn);
++ enter_blocking_section();
++ return ret;
++}
++
+ #define CALLBACK(OPNAME) \
+ static OPNAME##_RTYPE gm281_ops_##OPNAME OPNAME##_ARGS \
+ {\
+@@ -634,6 +662,7 @@
+
+ void set_fuse_operations(struct fuse_operation_names const *op)
+ {
++ SET_OPERATION(init)
+ FOR_ALL_OPS(SET_OPERATION)
+ }
+