From 1eac97eea4ec0bcef0be061a2cba93a584355283 Mon Sep 17 00:00:00 2001 From: Chuyan Zhang Date: Thu, 30 Nov 2023 02:15:06 -0800 Subject: Add real disk i/o, add mkfs.aya (not yet implemented) --- src/utils/mod.rs | 92 -------------------------------------------------------- 1 file changed, 92 deletions(-) delete mode 100644 src/utils/mod.rs (limited to 'src/utils/mod.rs') diff --git a/src/utils/mod.rs b/src/utils/mod.rs deleted file mode 100644 index 468ebdb..0000000 --- a/src/utils/mod.rs +++ /dev/null @@ -1,92 +0,0 @@ -mod constants; -pub mod permissions; - -use crate::block_device::BLOCK_SIZE; -use crate::disk::inode::{Inode, INODE_SIZE}; -use crate::{AyaFS, INODE_PER_BLOCK}; -use fuser::{FileAttr, FileType}; -use std::time::{Duration, SystemTime, UNIX_EPOCH}; - -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 to_systime(time: u32) -> SystemTime { - UNIX_EPOCH + Duration::from_secs(time as u64) -} - -// File type code, one of: -// 0x0 Unknown. -// 0x1 Regular file. -// 0x2 Directory. -// 0x3 Character device file. -// 0x4 Block device file. -// 0x5 FIFO. -// 0x6 Socket. -// 0x7 Symbolic link. - -pub(crate) fn from_filetype(file_type: FileType) -> u8 { - match file_type { - FileType::NamedPipe => 0x5, - FileType::CharDevice => 0x3, - FileType::BlockDevice => 0x4, - FileType::Directory => 0x2, - FileType::RegularFile => 0x1, - FileType::Symlink => 0x7, - FileType::Socket => 0x6, - } -} - -pub(crate) fn to_filetype(file_type: u8) -> Option { - match file_type { - 0x0 => None, - 0x1 => Some(FileType::RegularFile), - 0x2 => Some(FileType::Directory), - 0x3 => Some(FileType::CharDevice), - 0x4 => Some(FileType::BlockDevice), - 0x5 => Some(FileType::NamedPipe), - 0x6 => Some(FileType::Socket), - 0x7 => Some(FileType::Symlink), - _ => panic!("bad filetype"), - } -} - -pub(crate) fn to_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.mtime), - 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, - } -} - -impl AyaFS { - /// 输入 inode 编号, 返回它对应的 block number 和 block 内 offset - pub(crate) fn locate_inode(&self, inode_index: usize) -> (usize, usize) { - let block_number = - inode_index / INODE_PER_BLOCK + 1 + self.inode_bitmap.length + self.data_bitmap.length; - let block_offset = inode_index % INODE_PER_BLOCK * INODE_SIZE; - (block_number, block_offset) - } -} -- cgit v1.2.3-70-g09d2