1pub const FUSE_KERNEL_VERSION: u32 = 7;
9#[cfg(not(feature = "abi-7-9"))]
11pub const FUSE_KERNEL_MINOR_VERSION: u32 = 8;
12#[cfg(all(feature = "abi-7-9", not(feature = "abi-7-10")))]
14pub const FUSE_KERNEL_MINOR_VERSION: u32 = 9;
15#[cfg(all(feature = "abi-7-10", not(feature = "abi-7-11")))]
17pub const FUSE_KERNEL_MINOR_VERSION: u32 = 10;
18#[cfg(all(feature = "abi-7-11", not(feature = "abi-7-12")))]
20pub const FUSE_KERNEL_MINOR_VERSION: u32 = 11;
21#[cfg(all(feature = "abi-7-12", not(feature = "abi-7-13")))]
23pub const FUSE_KERNEL_MINOR_VERSION: u32 = 12;
24#[cfg(all(feature = "abi-7-13", not(feature = "abi-7-14")))]
26pub const FUSE_KERNEL_MINOR_VERSION: u32 = 13;
27#[cfg(all(feature = "abi-7-14", not(feature = "abi-7-15")))]
29pub const FUSE_KERNEL_MINOR_VERSION: u32 = 14;
30#[cfg(all(feature = "abi-7-15", not(feature = "abi-7-16")))]
32pub const FUSE_KERNEL_MINOR_VERSION: u32 = 15;
33#[cfg(all(feature = "abi-7-16", not(feature = "abi-7-17")))]
35pub const FUSE_KERNEL_MINOR_VERSION: u32 = 16;
36#[cfg(all(feature = "abi-7-17", not(feature = "abi-7-18")))]
38pub const FUSE_KERNEL_MINOR_VERSION: u32 = 17;
39#[cfg(all(feature = "abi-7-18", not(feature = "abi-7-19")))]
41pub const FUSE_KERNEL_MINOR_VERSION: u32 = 18;
42#[cfg(all(feature = "abi-7-19", not(feature = "abi-7-20")))]
44pub const FUSE_KERNEL_MINOR_VERSION: u32 = 19;
45#[cfg(all(feature = "abi-7-20", not(feature = "abi-7-21")))]
47pub const FUSE_KERNEL_MINOR_VERSION: u32 = 20;
48#[cfg(all(feature = "abi-7-21", not(feature = "abi-7-22")))]
50pub const FUSE_KERNEL_MINOR_VERSION: u32 = 21;
51#[cfg(all(feature = "abi-7-22", not(feature = "abi-7-23")))]
53pub const FUSE_KERNEL_MINOR_VERSION: u32 = 22;
54#[cfg(all(feature = "abi-7-23", not(feature = "abi-7-24")))]
56pub const FUSE_KERNEL_MINOR_VERSION: u32 = 23;
57#[cfg(all(feature = "abi-7-24", not(feature = "abi-7-25")))]
59pub const FUSE_KERNEL_MINOR_VERSION: u32 = 24;
60#[cfg(all(feature = "abi-7-25", not(feature = "abi-7-26")))]
62pub const FUSE_KERNEL_MINOR_VERSION: u32 = 25;
63#[cfg(all(feature = "abi-7-26", not(feature = "abi-7-27")))]
65pub const FUSE_KERNEL_MINOR_VERSION: u32 = 26;
66#[cfg(all(feature = "abi-7-27", not(feature = "abi-7-28")))]
68pub const FUSE_KERNEL_MINOR_VERSION: u32 = 27;
69#[cfg(all(feature = "abi-7-28", not(feature = "abi-7-29")))]
71pub const FUSE_KERNEL_MINOR_VERSION: u32 = 28;
72#[cfg(all(feature = "abi-7-29", not(feature = "abi-7-30")))]
74pub const FUSE_KERNEL_MINOR_VERSION: u32 = 29;
75#[cfg(all(feature = "abi-7-30", not(feature = "abi-7-31")))]
77pub const FUSE_KERNEL_MINOR_VERSION: u32 = 30;
78#[cfg(all(feature = "abi-7-31", not(feature = "abi-7-32")))]
80pub const FUSE_KERNEL_MINOR_VERSION: u32 = 31;
81
82#[repr(C)]
84pub struct FuseAttr {
85 pub ino: INum,
87 pub size: u64,
89 pub blocks: u64,
91 pub atime: u64,
93 pub mtime: u64,
95 pub ctime: u64,
97 pub atimensec: u32,
99 pub mtimensec: u32,
101 pub ctimensec: u32,
103 pub mode: u32,
105 pub nlink: u32,
107 pub uid: u32,
109 pub gid: u32,
111 pub rdev: u32,
113 #[cfg(feature = "abi-7-9")]
115 pub blksize: u32,
116 #[cfg(feature = "abi-7-9")]
118 pub padding: u32,
119}
120
121impl std::fmt::Debug for FuseAttr {
122 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
123 write!(
125 f,
126 "ino={},size={},blocks={},atime={},mtime={},ctime={},atimensec={},mtimensec={},ctimensec={},mode={},nlink={},uid={},gid={},rdev={}",
127 self.ino,
128 self.size,
129 self.blocks,
130 self.atime,
131 self.mtime,
132 self.ctime,
133 self.atimensec,
134 self.mtimensec,
135 self.ctimensec,
136 self.mode,
137 self.nlink,
138 self.uid,
139 self.gid,
140 self.rdev,
141 )
142 }
143}
144
145#[derive(Debug)]
147#[repr(C)]
148pub struct FuseKStatFs {
149 pub blocks: u64,
151 pub bfree: u64,
153 pub bavail: u64,
155 pub files: u64,
157 pub ffree: u64,
159 pub bsize: u32,
161 pub namelen: u32,
163 pub frsize: u32,
165 pub padding: u32,
167 pub spare: [u32; 6],
169}
170
171#[derive(Debug)]
173#[repr(C)]
174pub struct FuseFileLock {
175 pub start: u64,
177 pub end: u64,
179 pub typ: u32,
181 pub pid: u32,
183}
184
185#[allow(dead_code)]
187pub mod setattr_flags {
188 pub const FATTR_MODE: u32 = 1 << 0_i32;
190 pub const FATTR_UID: u32 = 1 << 1_i32;
192 pub const FATTR_GID: u32 = 1 << 2_i32;
194 pub const FATTR_SIZE: u32 = 1 << 3_i32;
196 pub const FATTR_ATIME: u32 = 1 << 4_i32;
198 pub const FATTR_MTIME: u32 = 1 << 5_i32;
200 pub const FATTR_FH: u32 = 1 << 6_i32;
202 #[cfg(feature = "abi-7-9")]
204 pub const FATTR_ATIME_NOW: u32 = 1 << 7_i32;
205 #[cfg(feature = "abi-7-9")]
207 pub const FATTR_MTIME_NOW: u32 = 1 << 8_i32;
208 #[cfg(feature = "abi-7-9")]
210 pub const FATTR_LOCKOWNER: u32 = 1 << 9_i32;
211 #[cfg(feature = "abi-7-23")]
213 pub const FATTR_CTIME: u32 = 1 << 10_i32;
214}
215
216use std::mem;
217
218use clippy_utilities::{Cast, OverflowArithmetic};
219pub use setattr_flags::*;
220
221#[allow(dead_code)]
233pub mod fopen_flags {
234 pub const FOPEN_DIRECT_IO: u32 = 1;
236
237 pub const FOPEN_KEEP_CACHE: u32 = 1 << 1_i32;
239
240 #[cfg(feature = "abi-7-10")]
242 pub const FOPEN_NONSEEKABLE: u32 = 1 << 2_i32;
243
244 #[cfg(feature = "abi-7-28")]
246 pub const FOPEN_CACHE_DIR: u32 = 1 << 3_i32;
247
248 #[cfg(feature = "abi-7-31")]
250 pub const FOPEN_STREAM: u32 = 1 << 4_i32;
251}
252
253pub use fopen_flags::*;
254
255#[allow(dead_code)]
257pub mod init_flags {
258 pub const FUSE_ASYNC_READ: u32 = 1;
260 pub const FUSE_POSIX_LOCKS: u32 = 1 << 1_i32;
262 #[cfg(feature = "abi-7-9")]
265 pub const FUSE_FILE_OPS: u32 = 1 << 2_i32;
266 #[cfg(feature = "abi-7-9")]
268 pub const FUSE_ATOMIC_O_TRUNC: u32 = 1 << 3_i32;
269 #[cfg(feature = "abi-7-10")]
271 pub const FUSE_EXPORT_SUPPORT: u32 = 1 << 4_i32;
272 #[cfg(feature = "abi-7-9")]
274 pub const FUSE_BIG_WRITES: u32 = 1 << 5_i32;
275 #[cfg(feature = "abi-7-12")]
277 pub const FUSE_DONT_MASK: u32 = 1 << 6_i32;
278 #[cfg(feature = "abi-7-14")]
280 pub const FUSE_SPLICE_WRITE: u32 = 1 << 7_i32;
281 #[cfg(feature = "abi-7-14")]
283 pub const FUSE_SPLICE_MOVE: u32 = 1 << 8_i32;
284 #[cfg(feature = "abi-7-14")]
286 pub const FUSE_SPLICE_READ: u32 = 1 << 9_i32;
287 #[cfg(feature = "abi-7-17")]
289 pub const FUSE_FLOCK_LOCKS: u32 = 1 << 10_i32;
290 #[cfg(feature = "abi-7-18")]
292 pub const FUSE_HAS_IOCTL_DIR: u32 = 1 << 11_i32;
293 #[cfg(feature = "abi-7-20")]
295 pub const FUSE_AUTO_INVAL_DATA: u32 = 1 << 12_i32;
296 #[cfg(feature = "abi-7-21")]
298 pub const FUSE_DO_READDIRPLUS: u32 = 1 << 13_i32;
299
300 #[cfg(feature = "abi-7-21")]
302 pub const FUSE_READDIRPLUS_AUTO: u32 = 1 << 14_i32;
303 #[cfg(feature = "abi-7-22")]
305 pub const FUSE_ASYNC_DIO: u32 = 1 << 15_i32;
306 #[cfg(feature = "abi-7-23")]
308 pub const FUSE_WRITEBACK_CACHE: u32 = 1 << 16_i32;
309 #[cfg(feature = "abi-7-23")]
311 pub const FUSE_NO_OPEN_SUPPORT: u32 = 1 << 17_i32;
312 #[cfg(feature = "abi-7-25")]
314 pub const FUSE_PARALLEL_DIROPS: u32 = 1 << 18_i32;
315 #[cfg(feature = "abi-7-26")]
318 pub const FUSE_HANDLE_KILLPRIV: u32 = 1 << 19_i32;
319 #[cfg(feature = "abi-7-26")]
321 pub const FUSE_POSIX_ACL: u32 = 1 << 20_i32;
322 #[cfg(feature = "abi-7-27")]
324 pub const FUSE_ABORT_ERROR: u32 = 1 << 21_i32;
325 #[cfg(feature = "abi-7-28")]
328 pub const FUSE_MAX_PAGES: u32 = 1 << 22_i32;
329 #[cfg(feature = "abi-7-28")]
331 pub const FUSE_CACHE_SYMLINKS: u32 = 1 << 23_i32;
332 #[cfg(feature = "abi-7-29")]
334 pub const FUSE_NO_OPENDIR_SUPPORT: u32 = 1 << 24_i32;
335 #[cfg(feature = "abi-7-30")]
338 pub const FUSE_EXPLICIT_INVAL_DATA: u32 = 1 << 25_i32;
339}
340
341pub use init_flags::*;
342
343#[allow(dead_code)]
347#[cfg(feature = "abi-7-11")]
348pub const CUSE_UNRESTRICTED_IOCTL: u32 = 1 << 0_i32; pub const FUSE_RELEASE_FLUSH: u32 = 1 << 0_i32;
352#[allow(dead_code)]
354#[cfg(feature = "abi-7-17")]
355pub const FUSE_RELEASE_FLOCK_UNLOCK: u32 = 1 << 1_i32;
356
357#[allow(dead_code)]
359#[cfg(feature = "abi-7-9")]
360pub const FUSE_GETATTR_FH: u32 = 1 << 0_i32;
361
362#[allow(dead_code)]
364#[cfg(feature = "abi-7-9")]
365pub const FUSE_LK_FLOCK: u32 = 1 << 0_i32;
366
367#[allow(dead_code)]
369pub mod write_flags {
370 #[cfg(feature = "abi-7-9")]
373 pub const FUSE_WRITE_CACHE: u32 = 1 << 0_i32;
374 #[cfg(feature = "abi-7-9")]
376 pub const FUSE_WRITE_LOCKOWNER: u32 = 1 << 1_i32;
377 #[cfg(feature = "abi-7-31")]
379 pub const FUSE_WRITE_KILL_PRIV: u32 = 1 << 2_i32;
380}
381
382pub use write_flags::*;
383
384#[allow(dead_code)]
386#[cfg(feature = "abi-7-9")]
387pub const FUSE_READ_LOCKOWNER: u32 = 1 << 1_i32;
388
389#[allow(dead_code)]
391#[cfg(feature = "abi-7-11")]
392pub mod ioctl_flags {
393 pub const FUSE_IOCTL_COMPAT: u32 = 1 << 0_i32;
395 pub const FUSE_IOCTL_UNRESTRICTED: u32 = 1 << 1_i32;
398 pub const FUSE_IOCTL_RETRY: u32 = 1 << 2_i32;
400 #[cfg(feature = "abi-7-16")]
402 pub const FUSE_IOCTL_32BIT: u32 = 1 << 3_i32;
403 #[cfg(feature = "abi-7-18")]
405 pub const FUSE_IOCTL_DIR: u32 = 1 << 4_i32;
406 #[cfg(feature = "abi-7-30")]
409 pub const FUSE_IOCTL_COMPAT_X32: u32 = 1 << 5_i32;
410 pub const FUSE_IOCTL_MAX_IOV: u32 = 256;
412}
413
414#[cfg(feature = "abi-7-11")]
415pub use ioctl_flags::*;
416
417#[allow(dead_code)]
421#[cfg(feature = "abi-7-11")]
422pub const FUSE_POLL_SCHEDULE_NOTIFY: u32 = 1 << 0_i32;
423
424#[allow(dead_code)]
428#[cfg(feature = "abi-7-31")]
429pub const FUSE_FSYNC_FDATASYNC: u32 = 1 << 0_i32;
430
431#[allow(
433 non_camel_case_types,
434 )]
436#[derive(Debug)]
437#[non_exhaustive]
438#[repr(C)]
439pub enum FuseOpCode {
440 FUSE_LOOKUP = 1,
442 FUSE_FORGET = 2,
444 FUSE_GETATTR = 3,
446 FUSE_SETATTR = 4,
448 FUSE_READLINK = 5,
450 FUSE_SYMLINK = 6,
452 FUSE_MKNOD = 8,
454 FUSE_MKDIR = 9,
456 FUSE_UNLINK = 10,
458 FUSE_RMDIR = 11,
460 FUSE_RENAME = 12,
462 FUSE_LINK = 13,
464 FUSE_OPEN = 14,
466 FUSE_READ = 15,
468 FUSE_WRITE = 16,
470 FUSE_STATFS = 17,
472 FUSE_RELEASE = 18,
474 FUSE_FSYNC = 20,
476 FUSE_SETXATTR = 21,
478 FUSE_GETXATTR = 22,
480 FUSE_LISTXATTR = 23,
482 FUSE_REMOVEXATTR = 24,
484 FUSE_FLUSH = 25,
486 FUSE_INIT = 26,
488 FUSE_OPENDIR = 27,
490 FUSE_READDIR = 28,
492 FUSE_RELEASEDIR = 29,
494 FUSE_FSYNCDIR = 30,
496 FUSE_GETLK = 31,
498 FUSE_SETLK = 32,
500 FUSE_SETLKW = 33,
502 FUSE_ACCESS = 34,
504 FUSE_CREATE = 35,
506 FUSE_INTERRUPT = 36,
508 FUSE_BMAP = 37,
511 FUSE_DESTROY = 38,
513 #[cfg(feature = "abi-7-11")]
515 FUSE_IOCTL = 39,
516 #[cfg(feature = "abi-7-11")]
518 FUSE_POLL = 40,
519 #[cfg(feature = "abi-7-15")]
521 FUSE_NOTIFY_REPLY = 41,
522 #[cfg(feature = "abi-7-16")]
524 FUSE_BATCH_FORGET = 42,
525 #[cfg(feature = "abi-7-19")]
527 FUSE_FALLOCATE = 43,
528 #[cfg(feature = "abi-7-21")]
530 FUSE_READDIRPLUS = 44,
531 #[cfg(feature = "abi-7-23")]
533 FUSE_RENAME2 = 45,
534 FUSE_LSEEK = 46,
537 FUSE_COPY_FILE_RANGE = 47,
540 #[cfg(feature = "abi-7-11")]
542 CUSE_INIT = 4096,
543}
544
545#[allow(dead_code)]
547#[allow(
548 non_camel_case_types,
549 )]
551#[cfg(feature = "abi-7-11")]
552#[derive(Debug)]
553#[repr(C)]
554pub enum FuseNotifyCode {
555 FUSE_POLL = 1,
557 #[cfg(feature = "abi-7-12")]
559 FUSE_NOTIFY_INVAL_INODE = 2,
560 #[cfg(feature = "abi-7-12")]
562 FUSE_NOTIFY_INVAL_ENTRY = 3,
563 #[cfg(feature = "abi-7-15")]
565 FUSE_NOTIFY_STORE = 4,
566 #[cfg(feature = "abi-7-15")]
568 FUSE_NOTIFY_RETRIEVE = 5,
569 #[cfg(feature = "abi-7-18")]
571 FUSE_NOTIFY_DELETE = 6,
572 FUSE_NOTIFY_CODE_MAX,
574}
575
576#[allow(dead_code)]
578pub const FUSE_MIN_READ_BUFFER: usize = 8192;
579
580#[allow(dead_code)]
582pub mod fuse_compat_configs {
583 pub const FUSE_COMPAT_STATFS_SIZE: usize = 48;
585 #[cfg(feature = "abi-7-9")]
587 pub const FUSE_COMPAT_ENTRY_OUT_SIZE: usize = 120;
588 #[cfg(feature = "abi-7-9")]
590 pub const FUSE_COMPAT_ATTR_OUT_SIZE: usize = 96;
591 #[cfg(feature = "abi-7-12")]
593 pub const FUSE_COMPAT_MKNOD_IN_SIZE: usize = 8;
594 #[cfg(feature = "abi-7-9")]
596 pub const FUSE_COMPAT_WRITE_IN_SIZE: usize = 24;
597 #[cfg(feature = "abi-7-23")]
599 pub const FUSE_COMPAT_INIT_OUT_SIZE: usize = 8;
600 #[cfg(feature = "abi-7-23")]
602 pub const FUSE_COMPAT_22_INIT_OUT_SIZE: usize = 24;
603}
604
605pub use fuse_compat_configs::*;
606
607use crate::fs_util::INum;
608
609#[derive(Debug)]
611#[repr(C)]
612pub struct FuseEntryOut {
613 pub nodeid: u64,
615 pub generation: u64,
617 pub entry_valid: u64,
619 pub attr_valid: u64,
621 pub entry_valid_nsec: u32,
623 pub attr_valid_nsec: u32,
625 pub attr: FuseAttr,
627}
628
629#[derive(Debug)]
631#[repr(C)]
632pub struct FuseForgetIn {
633 pub nlookup: u64,
635}
636
637#[cfg(feature = "abi-7-16")]
639#[derive(Debug)]
640#[repr(C)]
641pub struct FuseForgetOne {
642 pub nodeid: u64,
644 pub nlookup: u64,
646}
647
648#[cfg(feature = "abi-7-16")]
650#[derive(Debug)]
651#[repr(C)]
652pub struct FuseBatchForgetIn {
653 pub count: u32,
655 pub dummy: u32,
657 }
660
661#[cfg(feature = "abi-7-9")]
663#[derive(Debug)]
664#[repr(C)]
665pub struct FuseGetAttrIn {
666 pub getattr_flags: u32,
668 pub dummy: u32,
670 pub fh: u64,
672}
673
674#[derive(Debug)]
676#[repr(C)]
677pub struct FuseAttrOut {
678 pub attr_valid: u64,
680 pub attr_valid_nsec: u32,
682 pub dummy: u32,
684 pub attr: FuseAttr,
686}
687
688#[derive(Debug)]
690#[repr(C)]
691pub struct FuseMkNodIn {
692 pub mode: u32,
694 pub rdev: u32,
696 #[cfg(feature = "abi-7-12")]
698 pub umask: u32,
699 #[cfg(feature = "abi-7-12")]
701 pub padding: u32,
702}
703
704#[derive(Debug)]
706#[repr(C)]
707pub struct FuseMkDirIn {
708 pub mode: u32,
710 #[cfg(not(feature = "abi-7-12"))]
712 pub padding: u32,
713 #[cfg(feature = "abi-7-12")]
715 pub umask: u32,
716}
717
718#[derive(Debug)]
720#[repr(C)]
721pub struct FuseRenameIn {
722 pub newdir: u64,
724}
725
726#[cfg(feature = "abi-7-23")]
734#[derive(Debug)]
735#[repr(C)]
736pub struct FuseRename2In {
737 pub newdir: u64,
739 pub flags: u32,
741 pub padding: u32,
743}
744
745#[derive(Debug)]
747#[repr(C)]
748pub struct FuseLinkIn {
749 pub oldnodeid: u64,
751}
752
753#[derive(Debug)]
755#[repr(C)]
756pub struct FuseSetAttrIn {
757 pub valid: u32,
759 pub padding: u32,
761 pub fh: u64,
763 pub size: u64,
765 #[cfg(not(feature = "abi-7-9"))]
767 pub unused1: u64,
768 #[cfg(feature = "abi-7-9")]
770 pub lock_owner: u64,
771 pub atime: u64,
773 pub mtime: u64,
775 #[cfg(not(feature = "abi-7-23"))]
777 pub unused2: u64,
778 #[cfg(feature = "abi-7-23")]
780 pub ctime: u64,
781 pub atimensec: u32,
783 pub mtimensec: u32,
785 #[cfg(not(feature = "abi-7-23"))]
787 pub unused3: u32,
788 #[cfg(feature = "abi-7-23")]
790 pub ctimensec: u32,
791 pub mode: u32,
793 pub unused4: u32,
795 pub uid: u32,
797 pub gid: u32,
799 pub unused5: u32,
801}
802
803#[derive(Debug)]
805#[repr(C)]
806pub struct FuseOpenIn {
807 pub flags: u32,
809 #[cfg(not(feature = "abi-7-12"))]
810 pub mode: u32,
812 #[cfg(feature = "abi-7-12")]
813 pub unused: u32,
815}
816
817#[derive(Debug)]
819#[repr(C)]
820pub struct FuseCreateIn {
821 pub flags: u32,
823 pub mode: u32,
825 #[cfg(feature = "abi-7-12")]
827 pub umask: u32,
828 #[cfg(feature = "abi-7-12")]
830 pub padding: u32,
831}
832
833#[derive(Debug)]
835#[repr(C)]
836pub struct FuseOpenOut {
837 pub fh: u64,
839 pub open_flags: u32,
841 pub padding: u32,
843}
844
845#[derive(Debug)]
847#[repr(C)]
848pub struct FuseReleaseIn {
849 pub fh: u64,
851 pub flags: u32,
853 pub release_flags: u32,
855 pub lock_owner: u64,
857}
858
859#[derive(Debug)]
861#[repr(C)]
862pub struct FuseFlushIn {
863 pub fh: u64,
865 pub unused: u32,
867 pub padding: u32,
869 pub lock_owner: u64,
871}
872
873#[derive(Debug)]
875#[repr(C)]
876pub struct FuseReadIn {
877 pub fh: u64,
879 pub offset: u64,
881 pub size: u32,
883 #[cfg(feature = "abi-7-9")]
885 pub read_flags: u32,
886 #[cfg(feature = "abi-7-9")]
888 pub lock_owner: u64,
889 #[cfg(feature = "abi-7-9")]
891 pub flags: u32,
892 pub padding: u32,
894}
895
896#[derive(Debug)]
898#[repr(C)]
899pub struct FuseWriteIn {
900 pub fh: u64,
902 pub offset: u64,
904 pub size: u32,
906 pub write_flags: u32,
908 #[cfg(feature = "abi-7-9")]
910 pub lock_owner: u64,
911 #[cfg(feature = "abi-7-9")]
913 pub flags: u32,
914 #[cfg(feature = "abi-7-9")]
916 pub padding: u32,
917}
918
919#[derive(Debug)]
921#[repr(C)]
922pub struct FuseWriteOut {
923 pub size: u32,
925 pub padding: u32,
927}
928
929#[derive(Debug)]
931#[repr(C)]
932pub struct FuseStatFsOut {
933 pub st: FuseKStatFs,
935}
936
937#[derive(Debug)]
939#[repr(C)]
940pub struct FuseFSyncIn {
941 pub fh: u64,
943 pub fsync_flags: u32,
945 pub padding: u32,
947}
948
949#[derive(Debug)]
951#[repr(C)]
952pub struct FuseSetXAttrIn {
953 pub size: u32,
955 pub flags: u32,
957}
958
959#[derive(Debug)]
961#[repr(C)]
962pub struct FuseGetXAttrIn {
963 pub size: u32,
965 pub padding: u32,
967}
968
969#[derive(Debug)]
971#[repr(C)]
972pub struct FuseGetXAttrOut {
973 pub size: u32,
975 pub padding: u32,
977}
978
979#[derive(Debug)]
981#[repr(C)]
982pub struct FuseLockIn {
983 pub fh: u64,
985 pub owner: u64,
987 pub lk: FuseFileLock,
989 #[cfg(feature = "abi-7-9")]
991 pub lk_flags: u32,
992 #[cfg(feature = "abi-7-9")]
994 pub padding: u32,
995}
996
997#[derive(Debug)]
999#[repr(C)]
1000pub struct FuseLockOut {
1001 pub lk: FuseFileLock,
1003}
1004
1005#[derive(Debug)]
1007#[repr(C)]
1008pub struct FuseAccessIn {
1009 pub mask: u32,
1011 pub padding: u32,
1013}
1014
1015#[derive(Debug)]
1017#[repr(C)]
1018pub struct FuseInitIn {
1019 pub major: u32,
1021 pub minor: u32,
1023 pub max_readahead: u32,
1025 pub flags: u32,
1027}
1028
1029#[derive(Debug)]
1031#[repr(C)]
1032pub struct FuseInitOut {
1033 pub major: u32,
1035 pub minor: u32,
1037 pub max_readahead: u32,
1039 pub flags: u32,
1041 #[cfg(not(feature = "abi-7-13"))]
1043 pub unused: u32,
1044 #[cfg(feature = "abi-7-13")]
1046 pub max_background: u16,
1047 #[cfg(feature = "abi-7-13")]
1050 pub congestion_threshold: u16,
1051 pub max_write: u32,
1053 #[cfg(feature = "abi-7-23")]
1057 pub time_gran: u32,
1058 #[cfg(all(feature = "abi-7-23", not(feature = "abi-7-28")))]
1062 pub unused: [u32; 9],
1063 #[cfg(feature = "abi-7-28")]
1065 pub max_pages: u16,
1066 #[cfg(feature = "abi-7-28")]
1067 pub padding: u16,
1069 #[cfg(feature = "abi-7-28")]
1071 pub unused: [u32; 8],
1072}
1073
1074#[allow(dead_code)]
1076#[cfg(feature = "abi-7-11")]
1077pub const CUSE_INIT_INFO_MAX: u32 = 4096;
1078
1079#[cfg(feature = "abi-7-11")]
1081#[derive(Debug)]
1082#[repr(C)]
1083pub struct CuseInitIn {
1084 pub major: u32,
1086 pub minor: u32,
1088 pub unused: u32,
1090 pub flags: u32,
1092}
1093
1094#[cfg(feature = "abi-7-11")]
1096#[derive(Debug)]
1097#[repr(C)]
1098pub struct CuseInitOut {
1099 pub major: u32,
1101 pub minor: u32,
1103 pub unused: u32,
1105 pub flags: u32,
1107 pub max_read: u32,
1109 pub max_write: u32,
1111 pub dev_major: u32,
1113 pub dev_minor: u32,
1115 pub spare: [u32; 10],
1117}
1118
1119#[derive(Debug)]
1121#[repr(C)]
1122pub struct FuseInterruptIn {
1123 pub unique: u64,
1125}
1126
1127#[derive(Debug)]
1129#[repr(C)]
1130pub struct FuseBMapIn {
1131 pub block: u64,
1133 pub blocksize: u32,
1135 pub padding: u32,
1137}
1138
1139#[derive(Debug)]
1141#[repr(C)]
1142pub struct FuseBMapOut {
1143 pub block: u64,
1145}
1146
1147#[cfg(feature = "abi-7-11")]
1149#[derive(Debug)]
1150#[repr(C)]
1151pub struct FuseIoCtlIn {
1152 pub fh: u64,
1154 pub flags: u32,
1156 pub cmd: u32,
1158 pub arg: u64,
1160 pub in_size: u32,
1162 pub out_size: u32,
1164}
1165
1166#[cfg(feature = "abi-7-16")]
1168#[derive(Debug)]
1169#[repr(C)]
1170pub struct FuseIoCtlIoVec {
1171 pub base: u64,
1173 pub len: u64,
1175}
1176
1177#[cfg(feature = "abi-7-11")]
1179#[derive(Debug)]
1180#[repr(C)]
1181pub struct FuseIoCtlOut {
1182 pub result: i32,
1184 pub flags: u32,
1186 pub in_iovs: u32,
1188 pub out_iovs: u32,
1190}
1191
1192#[cfg(feature = "abi-7-11")]
1194#[derive(Debug)]
1195#[repr(C)]
1196pub struct FusePollIn {
1197 pub fh: u64,
1199 pub kh: u64,
1201 pub flags: u32,
1203 #[cfg(not(feature = "abi-7-21"))]
1205 pub padding: u32,
1206 #[cfg(feature = "abi-7-21")]
1208 pub events: u32,
1209}
1210
1211#[cfg(feature = "abi-7-11")]
1213#[derive(Debug)]
1214#[repr(C)]
1215pub struct FusePollOut {
1216 pub revents: u32,
1218 pub padding: u32,
1220}
1221
1222#[cfg(feature = "abi-7-11")]
1224#[derive(Debug)]
1225#[repr(C)]
1226pub struct FuseNotifyPollWakeUpOut {
1227 pub kh: u64,
1229}
1230
1231#[cfg(feature = "abi-7-19")]
1233#[derive(Debug)]
1234#[repr(C)]
1235pub struct FuseFAllocateIn {
1236 pub fh: u64,
1238 pub offset: u64,
1240 pub length: u64,
1242 pub mode: u32,
1244 pub padding: u32,
1246}
1247
1248#[derive(Debug)]
1250#[repr(C)]
1251pub struct FuseInHeader {
1252 pub len: u32,
1254 pub opcode: u32,
1256 pub unique: u64,
1258 pub nodeid: u64,
1260 pub uid: u32,
1262 pub gid: u32,
1264 pub pid: u32,
1266 pub padding: u32,
1268}
1269
1270#[derive(Debug)]
1272#[repr(C)]
1273pub struct FuseOutHeader {
1274 pub len: u32,
1276 pub error: i32,
1278 pub unique: u64,
1280}
1281
1282#[derive(Debug)]
1284#[repr(C)]
1285pub struct FuseDirEnt {
1286 pub ino: INum,
1288 pub off: u64,
1290 pub namelen: u32,
1292 pub typ: u32,
1294 }
1297
1298impl FuseDirEnt {
1299 #[must_use]
1307 pub fn size_with_name(&self) -> usize {
1308 mem::size_of::<Self>().overflow_add(self.namelen.cast())
1309 }
1310}
1311
1312#[cfg(feature = "abi-7-21")]
1315#[derive(Debug)]
1316#[repr(C)]
1317pub struct FuseDirEntPlus {
1318 pub entry_out: FuseEntryOut,
1320 pub dirent: FuseDirEnt,
1322}
1323
1324#[cfg(feature = "abi-7-21")]
1325impl FuseDirEntPlus {
1326 #[must_use]
1337 #[allow(dead_code)]
1338 pub fn size_with_name(&self) -> usize {
1339 mem::size_of::<Self>().overflow_add(self.dirent.namelen.cast())
1340 }
1341}
1342
1343#[cfg(feature = "abi-7-12")]
1345#[derive(Debug)]
1346#[repr(C)]
1347pub struct FuseNotifyInvalINodeOut {
1348 pub ino: INum,
1350 pub off: i64,
1352 pub len: i64,
1354}
1355
1356#[cfg(feature = "abi-7-12")]
1358#[derive(Debug)]
1359#[repr(C)]
1360pub struct FuseNotifyInvalEntryOut {
1361 pub parent: INum,
1363 pub namelen: u32,
1365 pub padding: u32,
1367}
1368
1369#[cfg(feature = "abi-7-18")]
1371#[derive(Debug)]
1372#[repr(C)]
1373pub struct FuseNotifyDeleteOut {
1374 pub parent: INum,
1376 pub child: INum,
1378 pub namelen: u32,
1380 pub padding: u32,
1382}
1383
1384#[cfg(feature = "abi-7-15")]
1386#[derive(Debug)]
1387#[repr(C)]
1388pub struct FuseNotifyStoreOut {
1389 pub nodeid: INum,
1391 pub offset: u64,
1393 pub size: u32,
1395 pub padding: u32,
1397}
1398
1399#[cfg(feature = "abi-7-15")]
1401#[derive(Debug)]
1402#[repr(C)]
1403pub struct FuseNotifyRetrieveOut {
1404 pub notify_unique: u64,
1406 pub nodeid: u64,
1408 pub offset: u64,
1410 pub size: u32,
1412 pub padding: u32,
1414}
1415
1416#[cfg(feature = "abi-7-15")]
1419#[derive(Debug)]
1420#[repr(C)]
1421pub struct FuseNotifyRetrieveIn {
1422 pub dummy1: u64,
1424 pub offset: u64,
1426 pub size: u32,
1428 pub dummy2: u32,
1430 pub dummy3: u64,
1432 pub dummy4: u64,
1434}
1435
1436#[derive(Debug)]
1439#[repr(C)]
1440pub struct FuseLSeekIn {
1441 pub fh: u64,
1443 pub offset: u64,
1445 pub whence: u32,
1447 pub padding: u32,
1449}
1450
1451#[derive(Debug)]
1454#[repr(C)]
1455pub struct FuseLSeekOut {
1456 pub offset: u64,
1458}
1459
1460#[derive(Debug)]
1463#[repr(C)]
1464pub struct FuseCopyFileRangeIn {
1465 pub fh_in: u64,
1467 pub off_in: u64,
1469 pub nodeid_out: u64,
1471 pub fh_out: u64,
1473 pub off_out: u64,
1475 pub len: u64,
1477 pub flags: u64,
1479}