|
|
|
@ -41,13 +41,11 @@ impl Inode {
|
|
|
|
|
name: &str,
|
|
|
|
|
inode: &Dirty<DiskInode>,
|
|
|
|
|
) -> Option<u32> {
|
|
|
|
|
println!("into find_inode_id");
|
|
|
|
|
// assert it is a directory
|
|
|
|
|
assert!(inode.read(|inode| inode.is_dir()));
|
|
|
|
|
let file_count = inode.read(|inode| {
|
|
|
|
|
inode.size as usize
|
|
|
|
|
}) / DIRENT_SZ;
|
|
|
|
|
println!("file_count = {}", file_count);
|
|
|
|
|
let mut dirent_space: DirentBytes = Default::default();
|
|
|
|
|
for i in 0..file_count {
|
|
|
|
|
assert_eq!(
|
|
|
|
@ -94,7 +92,6 @@ impl Inode {
|
|
|
|
|
let blocks_needed = inode.read(|inode| {
|
|
|
|
|
inode.blocks_num_needed(new_size)
|
|
|
|
|
});
|
|
|
|
|
println!("blocks_num_needed = {}", blocks_needed);
|
|
|
|
|
let mut v: Vec<u32> = Vec::new();
|
|
|
|
|
for _ in 0..blocks_needed {
|
|
|
|
|
v.push(fs.alloc_data());
|
|
|
|
@ -106,7 +103,6 @@ impl Inode {
|
|
|
|
|
|
|
|
|
|
pub fn create(&self, name: &str) -> Option<Arc<Inode>> {
|
|
|
|
|
let mut fs = self.fs.lock();
|
|
|
|
|
println!("creating name {}", name);
|
|
|
|
|
let mut inode = self.get_disk_inode(&mut fs);
|
|
|
|
|
// assert it is a directory
|
|
|
|
|
assert!(inode.read(|inode| inode.is_dir()));
|
|
|
|
@ -114,13 +110,11 @@ impl Inode {
|
|
|
|
|
if let Some(_) = self.find_inode_id(name, &inode) {
|
|
|
|
|
return None;
|
|
|
|
|
}
|
|
|
|
|
println!("stop1");
|
|
|
|
|
|
|
|
|
|
// create a new file
|
|
|
|
|
// alloc a inode with an indirect block
|
|
|
|
|
let new_inode_id = fs.alloc_inode();
|
|
|
|
|
let indirect1 = fs.alloc_data();
|
|
|
|
|
println!("creating new file, new_inode_id={}, indirect={}", new_inode_id, indirect1);
|
|
|
|
|
// initialize inode
|
|
|
|
|
fs.get_disk_inode(new_inode_id).modify(|inode| {
|
|
|
|
|
inode.initialize(
|
|
|
|
@ -133,7 +127,6 @@ impl Inode {
|
|
|
|
|
let file_count =
|
|
|
|
|
inode.read(|inode| inode.size as usize) / DIRENT_SZ;
|
|
|
|
|
let new_size = (file_count + 1) * DIRENT_SZ;
|
|
|
|
|
println!("expected new_size={}", new_size);
|
|
|
|
|
// increase size
|
|
|
|
|
self.increase_size(new_size as u32, &mut inode, &mut fs);
|
|
|
|
|
// write dirent
|
|
|
|
@ -155,13 +148,11 @@ impl Inode {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn ls(&self) -> Vec<String> {
|
|
|
|
|
println!("into ls!");
|
|
|
|
|
let mut fs = self.fs.lock();
|
|
|
|
|
let inode = self.get_disk_inode(&mut fs);
|
|
|
|
|
let file_count = inode.read(|inode| {
|
|
|
|
|
(inode.size as usize) / DIRENT_SZ
|
|
|
|
|
});
|
|
|
|
|
println!("file_count = {}", file_count);
|
|
|
|
|
let mut v: Vec<String> = Vec::new();
|
|
|
|
|
for i in 0..file_count {
|
|
|
|
|
let mut dirent_bytes: DirentBytes = Default::default();
|
|
|
|
|