[pve-devel] [PATCH proxmox-fuse-rs] add explicit "C" ABI to all extern function declarations

Kefu Chai k.chai at proxmox.com
Thu Nov 13 03:13:01 CET 2025


This fixes deprecation warnings where extern function declarations
did not explicitly specify the ABI. All extern fn types in the
FUSE Operations struct now use `extern "C" fn` instead of `extern fn`.

The C ABI is required for FUSE callbacks that interface with the
native libfuse library.

Signed-off-by: Kefu Chai <k.chai at proxmox.com>
---
 src/sys.rs | 86 +++++++++++++++++++++++++++---------------------------
 1 file changed, 43 insertions(+), 43 deletions(-)

diff --git a/src/sys.rs b/src/sys.rs
index a08eece..17a01de 100644
--- a/src/sys.rs
+++ b/src/sys.rs
@@ -113,49 +113,49 @@ default_to_none! {
         // The order in which the functions are listed matters, as the offset in the
         // struct defines what function the fuse driver uses.
         // It should therefore not be altered!
-        pub init:            Option<extern fn(userdata: MutPtr)>,
-        pub destroy:         Option<extern fn(userdata: MutPtr)>,
-        pub lookup:          Option<extern fn(req: Request, parent: u64, name: StrPtr)>,
-        pub forget:          Option<extern fn(req: Request, inode: u64, nlookup: u64)>,
-        pub getattr:         Option<extern fn(req: Request, inode: u64, file_info: *const FuseFileInfo)>,
-        pub setattr:         Option<extern fn(req: Request, inode: u64, attr: *const libc::stat, to_set: c_int, file_info: *const FuseFileInfo)>,
-        pub readlink:        Option<extern fn(req: Request, inode: u64)>,
-        pub mknod:           Option<extern fn(req: Request, parent: u64, name: StrPtr, mode: libc::mode_t, rdev: libc::dev_t)>,
-        pub mkdir:           Option<extern fn(req: Request, parent: u64, name: StrPtr, mode: libc::mode_t)>,
-        pub unlink:          Option<extern fn(req: Request, parent: u64, name: StrPtr)>,
-        pub rmdir:           Option<extern fn(req: Request, parent: u64, name: StrPtr)>,
-        pub symlink:         Option<extern fn(req: Request, link: StrPtr, parent: u64, name: StrPtr)>,
-        pub rename:          Option<extern fn(req: Request, parent: u64, name: StrPtr, newparent: u64, newname: StrPtr, flags: c_int)>,
-        pub link:            Option<extern fn(req: Request, inode: u64, newparent: u64, newname: StrPtr)>,
-        pub open:            Option<extern fn(req: Request, inode: u64, file_info: *const FuseFileInfo)>,
-        pub read:            Option<extern fn(req: Request, inode: u64, size: size_t, offset: libc::off_t, file_info: *const FuseFileInfo)>,
-        pub write:           Option<extern fn(req: Request, inode: u64, buffer: *const u8, size: size_t, offset: libc::off_t, file_info: *const FuseFileInfo)>,
-        pub flush:           Option<extern fn(req: Request, inode: u64, file_info: *const FuseFileInfo)>,
-        pub release:         Option<extern fn(req: Request, inode: u64, file_info: *const FuseFileInfo)>,
-        pub fsync:           Option<extern fn(req: Request, inode: u64, datasync: c_int, file_info: *const FuseFileInfo)>,
-        pub opendir:         Option<extern fn(req: Request, inode: u64, file_info: *const FuseFileInfo)>,
-        pub readdir:         Option<extern fn(req: Request, inode: u64, size: size_t, offset: off_t, file_info: *const FuseFileInfo)>,
-        pub releasedir:      Option<extern fn(req: Request, inode: u64, file_info: *const FuseFileInfo)>,
-        pub fsyncdir:        Option<extern fn(req: Request, inode: u64, datasync: c_int, file_info: *const FuseFileInfo)>,
-        pub statfs:          Option<extern fn(req: Request, inode: u64)>,
-        pub setxattr:        Option<extern fn(req: Request, inode: u64, name: StrPtr, value: StrPtr, size: size_t, flags: c_int)>,
-        pub getxattr:        Option<extern fn(req: Request, inode: u64, name: StrPtr, size: size_t)>,
-        pub listxattr:       Option<extern fn(req: Request, inode: u64, size: size_t)>,
-        pub removexattr:     Option<extern fn(req: Request, inode: u64, name: StrPtr)>,
-        pub access:          Option<extern fn(req: Request, inode: u64, mask: i32)>,
-        pub create:          Option<extern fn(req: Request, parent: u64, name: StrPtr, mode: libc::mode_t, file_info: *const FuseFileInfo)>,
-        pub getlk:           Option<extern fn(req: Request, inode: u64, file_info: *const FuseFileInfo, lock: MutPtr)>,
-        pub setlk:           Option<extern fn(req: Request, inode: u64, file_info: *const FuseFileInfo, lock: MutPtr, sleep: c_int)>,
-        pub bmap:            Option<extern fn(req: Request, inode: u64, blocksize: size_t, idx: u64)>,
-        pub ioctl:           Option<extern fn(req: Request, inode: u64, cmd: c_int, arg: MutPtr, file_info: *const FuseFileInfo, flags: c_int, in_buf: ConstPtr, in_bufsz: size_t, out_bufsz: size_t)>,
-        pub poll:            Option<extern fn(req: Request, inode: u64, file_info: *const FuseFileInfo, pollhandle: MutPtr)>,
-        pub write_buf:       Option<extern fn(req: Request, inode: u64, bufv: MutPtr, offset: libc::off_t, file_info: *const FuseFileInfo)>,
-        pub retrieve_reply:  Option<extern fn(req: Request, cookie: ConstPtr, inode: u64, offset: libc::off_t, bufv: MutPtr)>,
-        pub forget_multi:    Option<extern fn(req: Request, count: size_t, forgets: MutPtr)>,
-        pub flock:           Option<extern fn(req: Request, inode: u64, file_info: *const FuseFileInfo, op: c_int)>,
-        pub fallocate:       Option<extern fn(req: Request, inode: u64, mode: c_int, offset: libc::off_t, length: libc::off_t, file_info: *const FuseFileInfo)>,
-        pub readdirplus:     Option<extern fn(req: Request, inode: u64, size: size_t, offset: off_t, file_info: *const FuseFileInfo)>,
-        pub copy_file_range: Option<extern fn(req: Request, ino_in: u64, off_in: libc::off_t, fi_in: *const FuseFileInfo, ino_out: u64, off_out: libc::off_t, fi_out: *const FuseFileInfo, len: size_t, flags: c_int)>,
+        pub init:            Option<extern "C" fn(userdata: MutPtr)>,
+        pub destroy:         Option<extern "C" fn(userdata: MutPtr)>,
+        pub lookup:          Option<extern "C" fn(req: Request, parent: u64, name: StrPtr)>,
+        pub forget:          Option<extern "C" fn(req: Request, inode: u64, nlookup: u64)>,
+        pub getattr:         Option<extern "C" fn(req: Request, inode: u64, file_info: *const FuseFileInfo)>,
+        pub setattr:         Option<extern "C" fn(req: Request, inode: u64, attr: *const libc::stat, to_set: c_int, file_info: *const FuseFileInfo)>,
+        pub readlink:        Option<extern "C" fn(req: Request, inode: u64)>,
+        pub mknod:           Option<extern "C" fn(req: Request, parent: u64, name: StrPtr, mode: libc::mode_t, rdev: libc::dev_t)>,
+        pub mkdir:           Option<extern "C" fn(req: Request, parent: u64, name: StrPtr, mode: libc::mode_t)>,
+        pub unlink:          Option<extern "C" fn(req: Request, parent: u64, name: StrPtr)>,
+        pub rmdir:           Option<extern "C" fn(req: Request, parent: u64, name: StrPtr)>,
+        pub symlink:         Option<extern "C" fn(req: Request, link: StrPtr, parent: u64, name: StrPtr)>,
+        pub rename:          Option<extern "C" fn(req: Request, parent: u64, name: StrPtr, newparent: u64, newname: StrPtr, flags: c_int)>,
+        pub link:            Option<extern "C" fn(req: Request, inode: u64, newparent: u64, newname: StrPtr)>,
+        pub open:            Option<extern "C" fn(req: Request, inode: u64, file_info: *const FuseFileInfo)>,
+        pub read:            Option<extern "C" fn(req: Request, inode: u64, size: size_t, offset: libc::off_t, file_info: *const FuseFileInfo)>,
+        pub write:           Option<extern "C" fn(req: Request, inode: u64, buffer: *const u8, size: size_t, offset: libc::off_t, file_info: *const FuseFileInfo)>,
+        pub flush:           Option<extern "C" fn(req: Request, inode: u64, file_info: *const FuseFileInfo)>,
+        pub release:         Option<extern "C" fn(req: Request, inode: u64, file_info: *const FuseFileInfo)>,
+        pub fsync:           Option<extern "C" fn(req: Request, inode: u64, datasync: c_int, file_info: *const FuseFileInfo)>,
+        pub opendir:         Option<extern "C" fn(req: Request, inode: u64, file_info: *const FuseFileInfo)>,
+        pub readdir:         Option<extern "C" fn(req: Request, inode: u64, size: size_t, offset: off_t, file_info: *const FuseFileInfo)>,
+        pub releasedir:      Option<extern "C" fn(req: Request, inode: u64, file_info: *const FuseFileInfo)>,
+        pub fsyncdir:        Option<extern "C" fn(req: Request, inode: u64, datasync: c_int, file_info: *const FuseFileInfo)>,
+        pub statfs:          Option<extern "C" fn(req: Request, inode: u64)>,
+        pub setxattr:        Option<extern "C" fn(req: Request, inode: u64, name: StrPtr, value: StrPtr, size: size_t, flags: c_int)>,
+        pub getxattr:        Option<extern "C" fn(req: Request, inode: u64, name: StrPtr, size: size_t)>,
+        pub listxattr:       Option<extern "C" fn(req: Request, inode: u64, size: size_t)>,
+        pub removexattr:     Option<extern "C" fn(req: Request, inode: u64, name: StrPtr)>,
+        pub access:          Option<extern "C" fn(req: Request, inode: u64, mask: i32)>,
+        pub create:          Option<extern "C" fn(req: Request, parent: u64, name: StrPtr, mode: libc::mode_t, file_info: *const FuseFileInfo)>,
+        pub getlk:           Option<extern "C" fn(req: Request, inode: u64, file_info: *const FuseFileInfo, lock: MutPtr)>,
+        pub setlk:           Option<extern "C" fn(req: Request, inode: u64, file_info: *const FuseFileInfo, lock: MutPtr, sleep: c_int)>,
+        pub bmap:            Option<extern "C" fn(req: Request, inode: u64, blocksize: size_t, idx: u64)>,
+        pub ioctl:           Option<extern "C" fn(req: Request, inode: u64, cmd: c_int, arg: MutPtr, file_info: *const FuseFileInfo, flags: c_int, in_buf: ConstPtr, in_bufsz: size_t, out_bufsz: size_t)>,
+        pub poll:            Option<extern "C" fn(req: Request, inode: u64, file_info: *const FuseFileInfo, pollhandle: MutPtr)>,
+        pub write_buf:       Option<extern "C" fn(req: Request, inode: u64, bufv: MutPtr, offset: libc::off_t, file_info: *const FuseFileInfo)>,
+        pub retrieve_reply:  Option<extern "C" fn(req: Request, cookie: ConstPtr, inode: u64, offset: libc::off_t, bufv: MutPtr)>,
+        pub forget_multi:    Option<extern "C" fn(req: Request, count: size_t, forgets: MutPtr)>,
+        pub flock:           Option<extern "C" fn(req: Request, inode: u64, file_info: *const FuseFileInfo, op: c_int)>,
+        pub fallocate:       Option<extern "C" fn(req: Request, inode: u64, mode: c_int, offset: libc::off_t, length: libc::off_t, file_info: *const FuseFileInfo)>,
+        pub readdirplus:     Option<extern "C" fn(req: Request, inode: u64, size: size_t, offset: off_t, file_info: *const FuseFileInfo)>,
+        pub copy_file_range: Option<extern "C" fn(req: Request, ino_in: u64, off_in: libc::off_t, fi_in: *const FuseFileInfo, ino_out: u64, off_out: libc::off_t, fi_out: *const FuseFileInfo, len: size_t, flags: c_int)>,
     }
 }
 
-- 
2.47.3





More information about the pve-devel mailing list