heim_disk/os/macos/partitions.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
bitflags::bitflags! {
// These flags are declared at `bsd/sys/mount.h`
/// Partition mount flags.
pub struct Flags: libc::c_uint {
// User specifiable flags
/// Read only filesystem
const MNT_RDONLY = 0x0000_0001;
/// File system written synchronously
const MNT_SYNCHRONOUS = 0x0000_0002;
/// Can't exec from filesystem
const MNT_NOEXEC = 0x0000_0004;
/// Don't honor `setuid` bits on fs
const MNT_NOSUID = 0x0000_0008;
/// Don't interpret special files
const MNT_NODEV = 0x0000_0010;
/// Union with underlying filesystem
const MNT_UNION = 0x0000_0020;
/// File system written asynchronously
const MNT_ASYNC = 0x0000_0040;
/// File system supports content protection
const MNT_CPROTECT = 0x0000_0080;
// NFS export related mount flags
/// File system is exported
const MNT_EXPORTED = 0x0000_0100;
// MAC labeled / "quarantined" flag
/// File system is quarantined
const MNT_QUARANTINE = 0x0000_0400;
// Flags set by internal operations
/// Filesystem is stored locally
const MNT_LOCAL = 0x0000_1000;
/// Quotas are enabled on filesystem
const MNT_QUOTA = 0x0000_2000;
/// Identifies the root filesystem
const MNT_ROOTFS = 0x0000_4000;
/// FS supports `volfs` (deprecated flag in Mac OS X 10.5)
const MNT_DOVOLFS = 0x0000_8000;
/// File system is not appropriate path to user data
const MNT_DONTBROWSE = 0x0010_0000;
/// VFS will ignore ownership information on filesystem objects
const MNT_IGNORE_OWNERSHIP = 0x0020_0000;
/// Filesystem was mounted by automounter
const MNT_AUTOMOUNTED = 0x0040_0000;
/// Filesystem is journaled
const MNT_JOURNALED = 0x0080_0000;
/// Don't allow user extended attributes
const MNT_NOUSERXATTR = 0x0100_0000;
/// Filesystem should defer writes
const MNT_DEFWRITE = 0x0200_0000;
/// MAC support for individual labels
const MNT_MULTILABEL = 0x0400_0000;
/// Disable update of file access time
const MNT_NOATIME = 0x1000_0000;
// External filesystem command modifier flags
/// Not a real mount, just an update
const MNT_UPDATE = 0x0001_0000;
/// Don't block unmount if not responding
const MNT_NOBLOCK = 0x0002_0000;
/// Reload filesystem data
const MNT_RELOAD = 0x0004_0000;
/// Force unmount or readonly change
const MNT_FORCE = 0x0008_0000;
// TODO: It is declared at `mount.h`, but it is hard to find what does it means.
// Should we have it at all?
// `bitflags` at this point is not allowing to use other constants
// MNT_UPDATE | MNT_NOBLOCK | MNT_RELOAD | MNT_FORCE
// const MNT_CMDFLAGS = 0x0001_0000 | 0x0002_0000 | 0x0004_0000 | 0x0008_0000;
}
}
/// macOS-specific extension for [Partition] struct.
///
/// [Partition]: ../../struct.Partition.html
pub trait PartitionExt {
/// Mount flags
fn flags(&self) -> Flags;
}
#[cfg(target_os = "macos")]
impl PartitionExt for crate::Partition {
fn flags(&self) -> Flags {
Flags::from_bits_truncate(self.as_ref().raw_flags())
}
}