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).
|
||||
/// 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(())
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user