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