From c744a3aea2cead8c53dc5e33d62ad74855ab128c Mon Sep 17 00:00:00 2001 From: Ben Pig Chu Date: Sat, 27 Oct 2018 01:16:38 +0800 Subject: [PATCH] get_entry(), as a different design from list() --- src/sfs.rs | 8 ++++++++ src/tests.rs | 5 ++++- src/vfs.rs | 3 +++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/sfs.rs b/src/sfs.rs index 4c4d5f2..abb201e 100644 --- a/src/sfs.rs +++ b/src/sfs.rs @@ -396,6 +396,14 @@ impl vfs::INode for INode { _ => unimplemented!(), } } + fn get_entry(&self,id: usize) -> vfs::Result { + assert_eq!(self.disk_inode.type_, FileType::Dir); + assert!(id vfs::Result> { assert_eq!(self.disk_inode.type_, FileType::Dir); diff --git a/src/tests.rs b/src/tests.rs index f2ac9f6..f0a6d9b 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -54,7 +54,7 @@ fn create_new_sfs() { let root = sfs.root_inode(); } -//#[test] +// #[test] fn print_root() { let sfs = _open_sample_file(); let root = sfs.root_inode(); @@ -62,6 +62,9 @@ fn print_root() { let files = root.borrow().list().unwrap(); println!("{:?}", files); + assert_eq!(files[3],root.borrow().get_entry(3).unwrap()); + + sfs.sync().unwrap(); } #[test] diff --git a/src/vfs.rs b/src/vfs.rs index 84e7f9d..eadd870 100644 --- a/src/vfs.rs +++ b/src/vfs.rs @@ -29,6 +29,9 @@ pub trait INode: Debug + Any { fn link(&mut self, name: &str, other:&mut INode) -> Result<()>; fn lookup(&self, path: &str) -> Result; fn list(&self) -> Result>; + /// like list()[id] + /// only get one item in list, often faster than list + fn get_entry(&self,id: usize) -> Result; // fn io_ctrl(&mut self, op: u32, data: &[u8]) -> Result<()>; fn fs(&self) -> Weak; /// this is used to implement dynamics cast