Source
pub const fanotify = struct {
pub const InitFlags = packed struct(u32) {
CLOEXEC: bool = false,
NONBLOCK: bool = false,
CLASS: enum(u2) {
NOTIF = 0,
CONTENT = 1,
PRE_CONTENT = 2,
} = .NOTIF,
UNLIMITED_QUEUE: bool = false,
UNLIMITED_MARKS: bool = false,
ENABLE_AUDIT: bool = false,
REPORT_PIDFD: bool = false,
REPORT_TID: bool = false,
REPORT_FID: bool = false,
REPORT_DIR_FID: bool = false,
REPORT_NAME: bool = false,
REPORT_TARGET_FID: bool = false,
_: u19 = 0,
};
pub const MarkFlags = packed struct(u32) {
ADD: bool = false,
REMOVE: bool = false,
DONT_FOLLOW: bool = false,
ONLYDIR: bool = false,
MOUNT: bool = false,
/// Mutually exclusive with `IGNORE`
IGNORED_MASK: bool = false,
IGNORED_SURV_MODIFY: bool = false,
FLUSH: bool = false,
FILESYSTEM: bool = false,
EVICTABLE: bool = false,
/// Mutually exclusive with `IGNORED_MASK`
IGNORE: bool = false,
_: u21 = 0,
};
pub const MarkMask = packed struct(u64) {
/// File was accessed
ACCESS: bool = false,
/// File was modified
MODIFY: bool = false,
/// Metadata changed
ATTRIB: bool = false,
/// Writtable file closed
CLOSE_WRITE: bool = false,
/// Unwrittable file closed
CLOSE_NOWRITE: bool = false,
/// File was opened
OPEN: bool = false,
/// File was moved from X
MOVED_FROM: bool = false,
/// File was moved to Y
MOVED_TO: bool = false,
/// Subfile was created
CREATE: bool = false,
/// Subfile was deleted
DELETE: bool = false,
/// Self was deleted
DELETE_SELF: bool = false,
/// Self was moved
MOVE_SELF: bool = false,
/// File was opened for exec
OPEN_EXEC: bool = false,
reserved13: u1 = 0,
/// Event queued overflowed
Q_OVERFLOW: bool = false,
/// Filesystem error
FS_ERROR: bool = false,
/// File open in perm check
OPEN_PERM: bool = false,
/// File accessed in perm check
ACCESS_PERM: bool = false,
/// File open/exec in perm check
OPEN_EXEC_PERM: bool = false,
reserved19: u8 = 0,
/// Interested in child events
EVENT_ON_CHILD: bool = false,
/// File was renamed
RENAME: bool = false,
reserved30: u1 = 0,
/// Event occurred against dir
ONDIR: bool = false,
reserved31: u33 = 0,
};
pub const event_metadata = extern struct {
event_len: u32,
vers: u8,
reserved: u8,
metadata_len: u16,
mask: MarkMask align(8),
fd: i32,
pid: i32,
pub const VERSION = 3;
};
pub const response = extern struct {
fd: i32,
response: u32,
};
/// Unique file identifier info record.
///
/// This structure is used for records of types `EVENT_INFO_TYPE.FID`.
/// `EVENT_INFO_TYPE.DFID` and `EVENT_INFO_TYPE.DFID_NAME`.
///
/// For `EVENT_INFO_TYPE.DFID_NAME` there is additionally a null terminated
/// name immediately after the file handle.
pub const event_info_fid = extern struct {
hdr: event_info_header,
fsid: kernel_fsid_t,
/// Following is an opaque struct file_handle that can be passed as
/// an argument to open_by_handle_at(2).
handle: [0]u8,
};
/// Variable length info record following event metadata.
pub const event_info_header = extern struct {
info_type: EVENT_INFO_TYPE,
pad: u8,
len: u16,
};
pub const EVENT_INFO_TYPE = enum(u8) {
FID = 1,
DFID_NAME = 2,
DFID = 3,
PIDFD = 4,
ERROR = 5,
OLD_DFID_NAME = 10,
OLD_DFID = 11,
NEW_DFID_NAME = 12,
NEW_DFID = 13,
};
}