corrected filesys
This commit is contained in:
parent
69a8a0d4ea
commit
347cdd9cf3
@ -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(())
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user