corrected filesys

This commit is contained in:
AmauryBrodu 2023-04-13 13:23:05 +02:00
parent 69a8a0d4ea
commit 347cdd9cf3

View File

@ -56,8 +56,8 @@ pub fn decomp_name(origin_path: String, head: &mut String, tail: &mut String) ->
/// - **name** is the complete name (relatively to the root directory).
/// its content will be modified!
pub fn find_dir(name: &mut String, file_sys : Filesys, drv_disk : DrvDisk) -> i32 {
let directory = Directory::init_directory(NUM_DIR_ENTRIES, drv_disk);
directory.fetch_from(file_sys.get_dir_file());
let directory = Directory::init_directory(NUM_DIR_ENTRIES);
directory.fetch_from(file_sys.get_dir_file(), drv_disk);
let mut sector = DIRECTORY_SECTOR;
let mut dirname = String::from("");
@ -74,7 +74,7 @@ pub fn find_dir(name: &mut String, file_sys : Filesys, drv_disk : DrvDisk) -> i3
let file = OpenFile::open_file(sector);
if file.hdr.is_dir() {
directory.fetch_from(file);
directory.fetch_from(file, drv_disk);
} else {
return -1;
}
@ -104,7 +104,7 @@ impl Filesys {
pub fn init_filesys(format: bool, mut drv_disk : DrvDisk) -> Filesys {
if format {
let mut free_map = BitMap::init_bitmap(disk::NUM_SECTORS as usize);
let mut directory = Directory::init_directory(NUM_DIR_ENTRIES, drv_disk);
let mut directory = Directory::init_directory(NUM_DIR_ENTRIES);
free_map.mark(FREE_MAP_SECTOR as usize);
free_map.mark(DIRECTORY_SECTOR as usize);
@ -124,7 +124,7 @@ impl Filesys {
let directory_file = OpenFile::open_file(DIRECTORY_SECTOR);
free_map.write_back(&mut free_map_file, &mut drv_disk);
directory.write_back(directory_file);
directory.write_back(directory_file, drv_disk);
Filesys {
free_map_file,
@ -163,20 +163,20 @@ impl Filesys {
///
/// - **name** is the name of file to be created (NOT MODIFIED)
/// - **initialSize** is the size of file to be created
pub fn create(&mut self, name: String, initial_size: i32, file_sys : Filesys, mut drv_disk : DrvDisk) -> Result<(), ErrorCode> {
pub fn create(&mut self, name: String, initial_size: i32, mut drv_disk : DrvDisk) -> Result<(), ErrorCode> {
//lock.acquire();
let mut dir_name = name.clone();
let dir_sector = find_dir(&mut dir_name, file_sys, drv_disk);
let dir_sector = find_dir(&mut dir_name, *self, drv_disk);
if dir_sector == ERROR {
//lock.release();
return Err(ErrorCode::InexistFileError);
}
let dir_file = OpenFile::open_file(dir_sector);
let directory = Directory::init_directory(NUM_DIR_ENTRIES, drv_disk);
directory.fetch_from(dir_file);
let mut directory = Directory::init_directory(NUM_DIR_ENTRIES);
directory.fetch_from(dir_file, drv_disk);
if directory.find(dir_name) != ERROR {
//lock.release();
@ -215,7 +215,7 @@ impl Filesys {
// everthing worked, flush all changes back to disk
hdr.write_back(sector, &mut drv_disk);
directory.write_back(dir_file);
directory.write_back(dir_file, drv_disk);
free_map.write_back(&mut self.free_map_file, &mut drv_disk);
//lock.release();
@ -243,8 +243,8 @@ impl Filesys {
// Read the directory from disk
let dir_file = OpenFile::open_file(dir_sector);
let directory = Directory::init_directory(NUM_DIR_ENTRIES, drv_disk);
directory.fetch_from(dir_file);
let directory = Directory::init_directory(NUM_DIR_ENTRIES);
directory.fetch_from(dir_file, drv_disk);
// Find the file in the directory
let sector = directory.find(dir_name);
@ -282,8 +282,8 @@ impl Filesys {
// Fetch the directory from the disk
let dir_file = OpenFile::open_file(dir_sector);
let directory = Directory::init_directory(NUM_DIR_ENTRIES, drv_disk);
directory.fetch_from(dir_file);
let mut directory = Directory::init_directory(NUM_DIR_ENTRIES);
directory.fetch_from(dir_file, drv_disk);
// Look for the file in the directory
let sector = directory.find(dir_name);
@ -315,7 +315,7 @@ impl Filesys {
// Flush everything to disk
free_map.write_back(&mut self.free_map_file, &mut drv_disk);
directory.write_back(dir_file);
directory.write_back(dir_file, drv_disk);
Ok(())
}
@ -375,8 +375,8 @@ impl Filesys {
// Fetch it from disk
let parent_dir_file = OpenFile::open_file(parent_sector);
let parent_dir = Directory::init_directory(NUM_DIR_ENTRIES, drv_disk);
parent_dir.fetch_from(parent_dir_file);
let mut parent_dir = Directory::init_directory(NUM_DIR_ENTRIES);
parent_dir.fetch_from(parent_dir_file, drv_disk);
// Check that the directory does not exit yet
if parent_dir.find(dir_name) >= 0 {
@ -414,11 +414,11 @@ impl Filesys {
// New directory (initially empty)
let new_dir_file = OpenFile::open_file(hdr_sector);
let new_dir = Directory::init_directory(NUM_DIR_ENTRIES, drv_disk);
new_dir.write_back(new_dir_file);
let new_dir = Directory::init_directory(NUM_DIR_ENTRIES);
new_dir.write_back(new_dir_file, drv_disk);
// Parent directory
parent_dir.write_back(parent_dir_file);
parent_dir.write_back(parent_dir_file, drv_disk);
free_map.write_back(&mut self.free_map_file, &mut drv_disk);
Ok(())
@ -447,8 +447,8 @@ impl Filesys {
// Fetch it from disk
let parent_dir_file = OpenFile::open_file(parent_sector);
let parent_dir = Directory::init_directory(NUM_DIR_ENTRIES, drv_disk);
parent_dir.fetch_from(parent_dir_file);
let mut parent_dir = Directory::init_directory(NUM_DIR_ENTRIES);
parent_dir.fetch_from(parent_dir_file, drv_disk);
// Check that the directory to be removed exist
let the_dir_sector = parent_dir.find(dir_name);
@ -467,8 +467,8 @@ impl Filesys {
// Fetch its contents from the disk
let the_dir_file = OpenFile::open_file(the_dir_sector);
let the_dir = Directory::init_directory(NUM_DIR_ENTRIES, drv_disk);
the_dir.fetch_from(the_dir_file);
let mut the_dir = Directory::init_directory(NUM_DIR_ENTRIES);
the_dir.fetch_from(the_dir_file, drv_disk);
// Check that is is empty
if !the_dir.is_empty() {
@ -490,7 +490,7 @@ impl Filesys {
// Flush everything to disk
free_map.write_back(&mut self.free_map_file, &mut drv_disk);
parent_dir.write_back(parent_dir_file);
parent_dir.write_back(parent_dir_file, drv_disk);
Ok(())
}