The following commit has been merged in the master branch:
commit c2dbd68a00e38413b1bf368dec3b1d2d020eb180
Author: Goswin von Brederlow
Date: Fri Mar 6 19:45:16 2009 +0100
Merging upstream and debian for release of 0.1-1.
diff --git a/examples/fs.ml b/examples/fs.ml
index f79e471..6dd2953 100644
--- a/examples/fs.ml
+++ b/examples/fs.ml
@@ -55,10 +55,11 @@ let fs_getattr inode =
let fs_ops = {
- Fuse.init= fs_init;
- Fuse.destroy = fs_destroy;
- Fuse.lookup = fs_lookup;
- Fuse.getattr = fs_getattr;
+ Fuse.default_ops with
+Fuse.init= Some fs_init;
+Fuse.destroy = Some fs_destroy;
+Fuse.lookup = Some fs_lookup;
+Fuse.getattr = Some fs_getattr;
}
let main args =
diff --git a/lib/fuse.ml b/lib/fuse.ml
index 745d6d1..a0041a5 100644
--- a/lib/fuse.ml
+++ b/lib/fuse.ml
@@ -19,6 +19,7 @@
type error =
SUCCESS
| ENOENT
+ | EIO
exception Error of error
@@ -46,19 +47,131 @@ type entry = {
e_stats_timeout : float;
e_entry_timeout : float;
}
+type file_info
+type mode
+type dev
+type statfs
+type lock
+type lock_info
+ (*
+type bmap_info
+ *)
type ops = {
- init: unit -> unit;
- destroy : unit -> unit;
- lookup : int64 -> string -> entry;
- getattr : int64 -> (stats * float);
+ init: (unit -> unit) option;
+ destroy : (unit -> unit) option;
+ lookup : (inode -> string -> entry) option;
+ forget : (inode -> int64 -> unit) option;
+ getattr : (inode -> (stats * float)) option;
+ setattr : (inode -> stats -> int -> file_info -> (stats * float)) option;
+ readlink: (inode -> string) option;
+ mknod : (inode -> string -> mode -> dev -> entry) option;
+ mkdir : (inode -> string -> mode -> entry) option;
+ unlink : (inode -> string -> unit) option;
+ rmdir : (inode -> string -> unit) option;
+ symlink : (string -> inode -> string -> entry) option;
+ rename : (inode -> string -> inode -> string -> unit) option;
+ link: (inode -> inode -> string -> entry) option;
+ openfile: (inode -> file_info -> file_info) option;
+ read: (inode -> int -> int64 -> file_info -> string) option;
+ write : (inode -> string -> int64 -> file_info -> int) option;
+ flush : (inode -> file_info -> unit) option;
+ release : (inode -> file_info -> unit) option;
+ fsync : (inode -> bool -> file_info -> unit) option;
+ opendir : (inode -> file_info -> file_info) option;
+ readdir : (inode -> int -> int64 -> file_info -> string) option;
+ releasedir : (inode -> file_info -> unit) option;
+ fsyncdir: (inode -> bool -> file_info -> unit) option;
+ statfs : (inode -> statfs) option;
+ setxattr: (inode -> string -> string -> int -> unit) option;
+ getxattr: (inode -> string -> int -> string) option;
+ listxattr : (inode -> int -> string list) option;
+ removexattr : (inode -> string -> unit) option;
+ access : (inode -> int -> unit) option;
+ create : (inode -> string -> mode -> file_info -> entry) option;
+ getlk : (inode -> file_info -> lock -> lock_info) option;
+ setlk : (inode -> file_info -> lock -> bool -> unit) option;
+(*
+ bmap: (inode -> int64 -> int64 -> int64) option;
+*)
+}
+
+let default_ops = {
+ init= None;
+ destroy = None;
+ lookup = None;
+ forget = None;
+ getattr = None;
+ setattr = None;
+ readlink= None;
+ mknod = None;
+ mkdir = None;
+ unlink = None;
+ rmdir = None;
+ symlink = None;
+ rename = None;
+ link= None;
+ openfile= None;
+ read= None;
+ write = None;
+ flush = None;
+ release = None;
+ fsync = None;
+ opendir = None;
+ readdir = None;
+ releasedir = None;
+ fsyncdir= None;
+ statfs = None;
+ setxattr= None;
+ getxattr= None;
+ listxattr = None;
+ removexattr = None;
+ access = None;
+ create = None;
+ getlk = None;
+ setlk = None;
+(*
+ bmap= None;
+*)
}
type fuse_ops = {
- fuse_init: unit -> unit;
- fuse_destroy : unit -> unit;
- fuse_lookup : fuse_req -> int64 -> string -> unit;
- fuse_getattr : fuse_req -> int64 -> unit;
+ fuse_init: unit -> unit;
+ fuse_destroy : unit -> unit;
+ fuse_lookup : fuse_req -> inode -> string -> unit;
+ fuse_forget : fuse_req -> inode -> int64 -> unit;
+ fuse_getattr : fuse_req -> inode -> unit;
+ fuse_setattr : fuse_req -> inode -> stats -> int -> file_info -> unit;
+ fuse_readlink: fuse_req -> inode -> unit;
+ fuse_mknod : fuse_req -> inode -> string -> mode -> dev -> unit;
+ fuse_mkdir : fuse_req -> inode -> string -> mode -> unit;
+ fuse_unlink : fuse_req -> inode -> string -> unit;
+ fuse_rmdir : fuse_req -> inode -> string -> unit;
+ fuse_symlink : fuse_req -> string -> inode -> string -> unit;
+ fuse_rename : fuse_req -