summaryrefslogtreecommitdiff
path: root/src/disk/inode.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/disk/inode.rs')
-rw-r--r--src/disk/inode.rs42
1 files changed, 41 insertions, 1 deletions
diff --git a/src/disk/inode.rs b/src/disk/inode.rs
index 6f9d338..1f5e54e 100644
--- a/src/disk/inode.rs
+++ b/src/disk/inode.rs
@@ -1,6 +1,6 @@
use crate::utils;
use bitflags::bitflags;
-use fuser::{FileAttr, FileType};
+use fuser::FileType;
pub const DIRECT_NUMBER: usize = 15;
@@ -33,30 +33,39 @@ bitflags! {
}
impl InodeMode {
+ #[allow(unused)]
pub(crate) fn exec_other(&self) -> bool {
self.0 & Self::IXOTH.0 != 0
}
+ #[allow(unused)]
pub(crate) fn write_other(&self) -> bool {
self.0 & Self::IWOTH.0 != 0
}
+ #[allow(unused)]
pub(crate) fn read_other(&self) -> bool {
self.0 & Self::IROTH.0 != 0
}
+ #[allow(unused)]
pub(crate) fn exec_group(&self) -> bool {
self.0 & Self::IXGRP.0 != 0
}
+ #[allow(unused)]
pub(crate) fn write_group(&self) -> bool {
self.0 & Self::IWGRP.0 != 0
}
+ #[allow(unused)]
pub(crate) fn read_group(&self) -> bool {
self.0 & Self::IRGRP.0 != 0
}
+ #[allow(unused)]
pub(crate) fn exec_user(&self) -> bool {
self.0 & Self::IXUSR.0 != 0
}
+ #[allow(unused)]
pub(crate) fn write_user(&self) -> bool {
self.0 & Self::IWUSR.0 != 0
}
+ #[allow(unused)]
pub(crate) fn read_user(&self) -> bool {
self.0 & Self::IRUSR.0 != 0
}
@@ -73,6 +82,8 @@ impl InodeMode {
(self.0 & 0xF000) == Self::IFDIR.0
}
+ pub(crate) fn is_symlink(&self) -> bool { self.0 & 0xF000 == Self::IFLNK.0 }
+
pub(crate) fn validate(mode_value: u16) -> Option<Self> {
let valid_flags: [u16; 7] = [0x1000, 0x2000, 0x4000, 0x6000, 0x8000, 0xA000, 0xC000];
valid_flags
@@ -165,6 +176,7 @@ impl Inode {
}
}
+ #[allow(unused)]
pub fn make_inode(
permissions: u16,
mode: InodeMode,
@@ -232,6 +244,28 @@ impl Inode {
)
}
+ pub fn symlink(
+ permissions: u16,
+ uid: u32,
+ gid: u32,
+ time: u32,
+ flags: u32,
+ generation: u32,
+ file_acl: u32,
+ dir_acl: u32,
+ ) -> Self {
+ Self::new(
+ InodeMode(permissions) | InodeMode::IFLNK,
+ uid,
+ gid,
+ time,
+ flags,
+ generation,
+ file_acl,
+ dir_acl,
+ )
+ }
+
pub(crate) fn is_file(&self) -> bool {
self.mode.is_file()
}
@@ -240,6 +274,12 @@ impl Inode {
self.mode.is_dir()
}
+ pub(crate) fn is_symlink(&self) -> bool { self.mode.is_symlink() }
+
+ pub(crate) fn file_type(&self) -> FileType {
+ self.mode.into()
+ }
+
pub fn empty() -> Self {
Self {
mode: InodeMode(0),