diff --git a/src/pxar/encoder.rs b/src/pxar/encoder.rs index 400ab38a..15ff761b 100644 --- a/src/pxar/encoder.rs +++ b/src/pxar/encoder.rs @@ -224,8 +224,11 @@ impl <'a, W: Write> Encoder<'a, W> { } fn read_fat_attr(&self, fd: RawFd, magic: i64, entry: &mut CaFormatEntry) -> Result<(), Error> { + use fs::magic::*; - if magic != MSDOS_SUPER_MAGIC && magic != FUSE_SUPER_MAGIC { return Ok(()); } + if magic != MSDOS_SUPER_MAGIC && magic != FUSE_SUPER_MAGIC { + return Ok(()); + } let mut attr: u32 = 0; @@ -429,7 +432,10 @@ impl <'a, W: Write> Encoder<'a, W> { } match magic { - EXT4_SUPER_MAGIC | XFS_SUPER_MAGIC | FUSE_SUPER_MAGIC | ZFS_SUPER_MAGIC => { + fs::magic::EXT4_SUPER_MAGIC | + fs::magic::XFS_SUPER_MAGIC | + fs::magic::FUSE_SUPER_MAGIC | + fs::magic::ZFS_SUPER_MAGIC => { let mut fsxattr = fs::FSXAttr::default(); let res = unsafe { fs::fs_ioc_fsgetxattr(fd, &mut fsxattr) @@ -1108,10 +1114,12 @@ fn detect_fs_type(fd: RawFd) -> Result { #[inline(always)] pub fn is_temporary_file_system(magic: i64) -> bool { + use fs::magic::*; magic == RAMFS_MAGIC || magic == TMPFS_MAGIC } pub fn is_virtual_file_system(magic: i64) -> bool { + use fs::magic::*; match magic { BINFMTFS_MAGIC | diff --git a/src/pxar/format_definition.rs b/src/pxar/format_definition.rs index 2b675d2e..0986d5c9 100644 --- a/src/pxar/format_definition.rs +++ b/src/pxar/format_definition.rs @@ -389,35 +389,6 @@ pub fn ca_feature_flags_from_fat_attr(attr: u32) -> u64 { flags } -// from /usr/include/linux/magic.h -// and from casync util.h -pub const BINFMTFS_MAGIC: i64 = 0x42494e4d; -pub const CGROUP2_SUPER_MAGIC: i64 = 0x63677270; -pub const CGROUP_SUPER_MAGIC: i64 = 0x0027e0eb; -pub const CONFIGFS_MAGIC: i64 = 0x62656570; -pub const DEBUGFS_MAGIC: i64 = 0x64626720; -pub const DEVPTS_SUPER_MAGIC: i64 = 0x00001cd1; -pub const EFIVARFS_MAGIC: i64 = 0xde5e81e4; -pub const FUSE_CTL_SUPER_MAGIC: i64 = 0x65735543; -pub const HUGETLBFS_MAGIC: i64 = 0x958458f6; -pub const MQUEUE_MAGIC: i64 = 0x19800202; -pub const NFSD_MAGIC: i64 = 0x6e667364; -pub const PROC_SUPER_MAGIC: i64 = 0x00009fa0; -pub const PSTOREFS_MAGIC: i64 = 0x6165676C; -pub const RPCAUTH_GSSMAGIC: i64 = 0x67596969; -pub const SECURITYFS_MAGIC: i64 = 0x73636673; -pub const SELINUX_MAGIC: i64 = 0xf97cff8c; -pub const SMACK_MAGIC: i64 = 0x43415d53; -pub const RAMFS_MAGIC: i64 = 0x858458f6; -pub const TMPFS_MAGIC: i64 = 0x01021994; -pub const SYSFS_MAGIC: i64 = 0x62656572; -pub const MSDOS_SUPER_MAGIC: i64 = 0x00004d44; -pub const BTRFS_SUPER_MAGIC: i64 = 0x9123683E; -pub const FUSE_SUPER_MAGIC: i64 = 0x65735546; -pub const EXT4_SUPER_MAGIC: i64 = 0x0000EF53; -pub const XFS_SUPER_MAGIC: i64 = 0x58465342; -pub const ZFS_SUPER_MAGIC: i64 = 0x2FC12FC1; - /// Definitions of typical feature flags for the *pxar* encoder/decoder. /// By this expensive syscalls for unsupported features are avoided. @@ -489,6 +460,8 @@ pub const CA_FORMAT_DEFAULT: u64 = /// Return the supported *pxar* feature flags based on the magic number of the filesystem. pub fn feature_flags_from_magic(magic: i64) -> u64 { + use crate::tools::fs::magic::*; + match magic { MSDOS_SUPER_MAGIC => { CA_FORMAT_WITH_2SEC_TIME| diff --git a/src/tools/fs.rs b/src/tools/fs.rs index a51d50ce..13f8d085 100644 --- a/src/tools/fs.rs +++ b/src/tools/fs.rs @@ -259,3 +259,5 @@ impl Default for FSXAttr { } } } + +pub (crate) mod magic; diff --git a/src/tools/fs/magic.rs b/src/tools/fs/magic.rs new file mode 100644 index 00000000..8ca0e8dc --- /dev/null +++ b/src/tools/fs/magic.rs @@ -0,0 +1,30 @@ +//! Filesystem related magic numbers + +// from /usr/include/linux/magic.h +// and from casync util.h +pub const BINFMTFS_MAGIC: i64 = 0x42494e4d; +pub const CGROUP2_SUPER_MAGIC: i64 = 0x63677270; +pub const CGROUP_SUPER_MAGIC: i64 = 0x0027e0eb; +pub const CONFIGFS_MAGIC: i64 = 0x62656570; +pub const DEBUGFS_MAGIC: i64 = 0x64626720; +pub const DEVPTS_SUPER_MAGIC: i64 = 0x00001cd1; +pub const EFIVARFS_MAGIC: i64 = 0xde5e81e4; +pub const FUSE_CTL_SUPER_MAGIC: i64 = 0x65735543; +pub const HUGETLBFS_MAGIC: i64 = 0x958458f6; +pub const MQUEUE_MAGIC: i64 = 0x19800202; +pub const NFSD_MAGIC: i64 = 0x6e667364; +pub const PROC_SUPER_MAGIC: i64 = 0x00009fa0; +pub const PSTOREFS_MAGIC: i64 = 0x6165676C; +pub const RPCAUTH_GSSMAGIC: i64 = 0x67596969; +pub const SECURITYFS_MAGIC: i64 = 0x73636673; +pub const SELINUX_MAGIC: i64 = 0xf97cff8c; +pub const SMACK_MAGIC: i64 = 0x43415d53; +pub const RAMFS_MAGIC: i64 = 0x858458f6; +pub const TMPFS_MAGIC: i64 = 0x01021994; +pub const SYSFS_MAGIC: i64 = 0x62656572; +pub const MSDOS_SUPER_MAGIC: i64 = 0x00004d44; +pub const BTRFS_SUPER_MAGIC: i64 = 0x9123683E; +pub const FUSE_SUPER_MAGIC: i64 = 0x65735546; +pub const EXT4_SUPER_MAGIC: i64 = 0x0000EF53; +pub const XFS_SUPER_MAGIC: i64 = 0x58465342; +pub const ZFS_SUPER_MAGIC: i64 = 0x2FC12FC1;