| 140 | } |
| 141 | |
| 142 | pub fn ls(&self) -> Vec<String> { |
| 143 | let _fs = self.fs.lock(); |
| 144 | self.read_disk_inode(|disk_inode| { |
| 145 | let file_count = (disk_inode.size as usize) / DIRENT_SZ; |
| 146 | let mut v: Vec<String> = Vec::new(); |
| 147 | for i in 0..file_count { |
| 148 | let mut dirent = DirEntry::empty(); |
| 149 | assert_eq!( |
| 150 | disk_inode.read_at(i * DIRENT_SZ, dirent.as_bytes_mut(), &self.block_device,), |
| 151 | DIRENT_SZ, |
| 152 | ); |
| 153 | v.push(String::from(dirent.name())); |
| 154 | } |
| 155 | v |
| 156 | }) |
| 157 | } |
| 158 | |
| 159 | pub fn read_at(&self, offset: usize, buf: &mut [u8]) -> usize { |
| 160 | let _fs = self.fs.lock(); |