diff options
author | Chuyan Zhang <me@zcy.moe> | 2023-11-23 02:11:16 -0800 |
---|---|---|
committer | Chuyan Zhang <me@zcy.moe> | 2023-11-23 02:11:16 -0800 |
commit | b8afa7cfb02b32278e268924e189170496f81c1b (patch) | |
tree | 449d5ae3342e259d66fcb338217e29479f906046 /src/utils | |
parent | 3f2151c043177501b0c7beb580d9737e3d824ad0 (diff) | |
download | myfs-b8afa7cfb02b32278e268924e189170496f81c1b.tar.gz myfs-b8afa7cfb02b32278e268924e189170496f81c1b.zip |
Add some callback (not finished)
Diffstat (limited to 'src/utils')
-rw-r--r-- | src/utils/mod.rs | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 2ea25e7..60b09f2 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -1,15 +1,48 @@ -use crate::disk::inode::INODE_SIZE; +use crate::block_device::BLOCK_SIZE; +use crate::disk::inode::{Inode, INODE_SIZE}; use crate::{AyaFS, INODE_PER_BLOCK}; -use std::time::{SystemTime, UNIX_EPOCH}; +use fuser::FileAttr; +use std::time::{Duration, SystemTime, UNIX_EPOCH}; -impl AyaFS { - pub(crate) fn time_now() -> u32 { - SystemTime::now() - .duration_since(UNIX_EPOCH) - .expect("How can current time be earlier than UNIX_EPOCH?") - .as_secs() as u32 +pub(crate) fn time_now() -> u32 { + SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("How can current time be earlier than UNIX_EPOCH?") + .as_secs() as u32 +} + +pub(crate) fn from_systime(system_time: SystemTime) -> u32 { + system_time + .duration_since(UNIX_EPOCH) + .expect("How can current time be earlier than UNIX_EPOCH?") + .as_secs() as u32 +} + +pub(crate) fn make_fileattr(inode_index: usize, inode: &Inode) -> FileAttr { + FileAttr { + ino: inode_index as u64, + size: inode.size as u64, + blocks: inode.n_blocks as u64, + atime: to_systime(inode.atime), + mtime: to_systime(inode.atime), + ctime: to_systime(inode.ctime), + crtime: to_systime(inode.crtime), + kind: inode.mode.into(), + perm: inode.mode.perm(), + nlink: inode.n_links as u32, + uid: inode.uid, + gid: inode.gid, + rdev: 0, // 我们不会遇到这个的 + blksize: BLOCK_SIZE as u32, + flags: inode.flags, } +} + +pub(crate) fn to_systime(time: u32) -> SystemTime { + UNIX_EPOCH + Duration::from_secs(time as u64) +} +impl AyaFS { /// 输入 inode 编号, 返回它对应的 block number 和 block 内 offset pub(crate) fn locate_inode(&self, inode_index: usize) -> (usize, usize) { let block_number = |