no more errors in filesys & fsmisc... for now

This commit is contained in:
Baptiste 2023-04-05 17:23:54 +02:00
parent dae609c6ed
commit 85e999a7b0
4 changed files with 56 additions and 45 deletions

View File

@ -165,5 +165,16 @@ impl Directory {
}
}
/// Return true if the directory is empty
pub fn is_empty(self) -> bool {
let mut empty = true;
for i in 0..self.table_size {
if self.table[i as usize].in_use {
empty = false;
}
}
empty
}
}

View File

@ -102,7 +102,7 @@ impl FileHdr {
}
///Fetch contents of file header from disk.
fn fetch_from(&mut self, sector: i32, drv_disk: &mut DrvDisk) {
pub fn fetch_from(&mut self, sector: i32, drv_disk: &mut DrvDisk) {
//temporary buffer
let mut sector_img = vec![0; SECTOR_SIZE as usize / std::mem::size_of::<i32>() ];
let mut data_sectors = vec![0; MAX_DATA_SECTORS as usize];
@ -149,7 +149,7 @@ impl FileHdr {
}
fn write_back(&self, sector: i32, drv_disk: &mut DrvDisk) {
pub fn write_back(&self, sector: i32, drv_disk: &mut DrvDisk) {
let mut sector_img = vec![0; DATAS_IN_SECTOR as usize];
// Fills the temporary buffer with zeroes

View File

@ -101,29 +101,29 @@ impl Filesys {
/// ### parameters
///
/// - **format** should we initialize the disk?
pub fn init_filesys(format: bool, drv_isk : DrvDisk) -> Filesys {
pub fn init_filesys(format: bool, mut drv_disk : DrvDisk) -> Filesys {
if format {
let free_map = BitMap::init_bitmap(disk::NUM_SECTORS as usize);
let directory = Directory::init_directory(NUM_DIR_ENTRIES, drv_isk);
let mut free_map = BitMap::init_bitmap(disk::NUM_SECTORS as usize);
let mut directory = Directory::init_directory(NUM_DIR_ENTRIES, drv_disk);
free_map.mark(FREE_MAP_SECTOR as usize);
free_map.mark(DIRECTORY_SECTOR as usize);
let map_header: FileHdr;
let dir_header: FileHdr;
let mut map_header: FileHdr;
let mut dir_header: FileHdr;
map_header.allocate(free_map, FREE_MAP_SECTOR);
dir_header.allocate(free_map, DIRECTORY_FILE_SIZE);
dir_header.set_dir();
map_header.write_back(FREE_MAP_SECTOR);
dir_header.write_back(DIRECTORY_SECTOR);
map_header.write_back(FREE_MAP_SECTOR, &mut drv_disk);
dir_header.write_back(DIRECTORY_SECTOR, &mut drv_disk);
let free_map_file = OpenFile::open_file(FREE_MAP_SECTOR);
let mut free_map_file = OpenFile::open_file(FREE_MAP_SECTOR);
let directory_file = OpenFile::open_file(DIRECTORY_SECTOR);
free_map.write_back(free_map_file);
free_map.write_back(&mut free_map_file, &mut drv_disk);
directory.write_back(directory_file);
Filesys {
@ -163,7 +163,7 @@ 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(self, name: String, initial_size: i32, file_sys : Filesys, drv_disk : DrvDisk) -> Result<(), ErrorCode> {
pub fn create(&mut self, name: String, initial_size: i32, file_sys : Filesys, mut drv_disk : DrvDisk) -> Result<(), ErrorCode> {
//lock.acquire();
let mut dir_name = name.clone();
@ -184,8 +184,8 @@ impl Filesys {
}
// Get the freemap from the disk
let free_map = BitMap::init_bitmap(disk::NUM_SECTORS as usize);
free_map.fetch_from(self.free_map_file);
let mut free_map = BitMap::init_bitmap(disk::NUM_SECTORS as usize);
free_map.fetch_from(&mut self.free_map_file, &mut drv_disk);
// Find a sector to hold the file header
let sector = free_map.find();
@ -205,7 +205,7 @@ impl Filesys {
}
// Indicate that this is a file, not a directory
let hdr = FileHdr::init_file_hdr(drv_disk);
let mut hdr = FileHdr::init_file_hdr();
hdr.set_file();
if !hdr.allocate(free_map, initial_size) {
@ -214,9 +214,9 @@ impl Filesys {
}
// everthing worked, flush all changes back to disk
hdr.write_back(sector);
hdr.write_back(sector, &mut drv_disk);
directory.write_back(dir_file);
free_map.write_back(self.free_map_file);
free_map.write_back(&mut self.free_map_file, &mut drv_disk);
//lock.release();
@ -231,7 +231,7 @@ impl Filesys {
/// ### parameters
///
/// - **name** the text name of the file to be opened (NOT MODIFIED)
pub fn open(self, name: String, file_sys : Filesys, drv_disk : DrvDisk) -> Option<&mut OpenFile> {
pub fn open(self, name: String, file_sys : Filesys, drv_disk : DrvDisk) -> Option<OpenFile> {
let mut open_file: OpenFile;
let mut dir_name = name.clone();
@ -250,13 +250,13 @@ impl Filesys {
let sector = directory.find(dir_name);
if sector >= 0 {
open_file = OpenFile::open_file(sector);
open_file.set_name(name);
if open_file.is_dir() {
open_file.name = name;
if open_file.hdr.is_dir() {
return None;
}
}
Some(&mut open_file)
Some(open_file)
}
/// Delete a file from the file system.
@ -269,7 +269,7 @@ impl Filesys {
/// ### parameters
///
/// - **name** the text name of the file to be removed (NOT MODIFIED)
pub fn remove(self, name: String, file_sys : Filesys, drv_disk : DrvDisk) -> Result<(), ErrorCode> {
pub fn remove(&mut self, name: String, file_sys : Filesys, mut drv_disk : DrvDisk) -> Result<(), ErrorCode> {
let mut dir_name = name.clone();
// Get the sector number of the parent directory
@ -294,8 +294,8 @@ impl Filesys {
}
// Fetch the file header from disk
let file_hdr: FileHdr;
file_hdr.fetch_from(self.free_map_file);
let mut file_hdr: FileHdr;
file_hdr.fetch_from(sector, &mut drv_disk);
// Do nothing if it's a directory
if file_hdr.is_dir() {
@ -303,8 +303,8 @@ impl Filesys {
}
// Get the freemap file from the disk
let free_map = BitMap::init_bitmap(disk::NUM_SECTORS as usize);
free_map.fetch_from(self.free_map_file);
let mut free_map = BitMap::init_bitmap(disk::NUM_SECTORS as usize);
free_map.fetch_from(&mut self.free_map_file, &mut drv_disk);
// Indicate that sectors are deallocated in the freemap
file_hdr.deallocate(free_map);
@ -314,7 +314,7 @@ impl Filesys {
directory.remove(dir_name);
// Flush everything to disk
free_map.write_back(self.free_map_file);
free_map.write_back(&mut self.free_map_file, &mut drv_disk);
directory.write_back(dir_file);
Ok(())
@ -364,7 +364,7 @@ impl Filesys {
/// ### parameters
///
/// - **name** is the name of directory to be created (NOT MODIFIED)
pub fn mkdir(self, name: String, file_sys : Filesys, drv_disk : DrvDisk) -> Result<(), ErrorCode> {
pub fn mkdir(&mut self, name: String, file_sys : Filesys, mut drv_disk : DrvDisk) -> Result<(), ErrorCode> {
let mut dir_name = name.clone();
// Lokk for the sector number of the parent directory
@ -384,8 +384,8 @@ impl Filesys {
}
// Get the freemap
let free_map = BitMap::init_bitmap(disk::NUM_SECTORS as usize);
free_map.fetch_from(self.free_map_file);
let mut free_map = BitMap::init_bitmap(disk::NUM_SECTORS as usize);
free_map.fetch_from(&mut self.free_map_file, &mut drv_disk);
// Get a free sector for the file header
let hdr_sector = free_map.find();
@ -394,7 +394,7 @@ impl Filesys {
}
// Allocate free sectors for the directory contents
let hdr: FileHdr;
let mut hdr: FileHdr;
if !hdr.allocate(free_map, DIRECTORY_FILE_SIZE) {
return Err(ErrorCode::OutOfDisk);
}
@ -410,7 +410,7 @@ impl Filesys {
// File header
hdr.set_dir();
hdr.write_back(hdr_sector);
hdr.write_back(hdr_sector, &mut drv_disk);
// New directory (initially empty)
let new_dir_file = OpenFile::open_file(hdr_sector);
@ -419,7 +419,7 @@ impl Filesys {
// Parent directory
parent_dir.write_back(parent_dir_file);
free_map.write_back(self.free_map_file);
free_map.write_back(&mut self.free_map_file, &mut drv_disk);
Ok(())
}
@ -436,7 +436,7 @@ impl Filesys {
/// ### parameters
///
/// - **name** the text name of the directory to be removed (NOT MODIFIED)
pub fn rmdir(self, name: String, file_sys : Filesys, drv_disk : DrvDisk) -> Result<(), ErrorCode> {
pub fn rmdir(&mut self, name: String, file_sys : Filesys, mut drv_disk : DrvDisk) -> Result<(), ErrorCode> {
let mut dir_name = name.clone();
// Get the sector number of the parent directory
@ -457,8 +457,8 @@ impl Filesys {
}
// Get its header
let the_dir_header: FileHdr;
the_dir_header.fetch_from(the_dir_sector);
let mut the_dir_header: FileHdr;
the_dir_header.fetch_from(the_dir_sector, &mut drv_disk);
// Check that is is a directory
if !the_dir_header.is_dir() {
@ -471,13 +471,13 @@ impl Filesys {
the_dir.fetch_from(the_dir_file);
// Check that is is empty
if !the_dir.empty() {
if !the_dir.is_empty() {
return Err(ErrorCode::DirectoryNotEmpty);
}
// Get the freemap from disk
let free_map = BitMap::init_bitmap(disk::NUM_SECTORS as usize);
free_map.fetch_from(self.free_map_file);
let mut free_map = BitMap::init_bitmap(disk::NUM_SECTORS as usize);
free_map.fetch_from(&mut self.free_map_file, &mut drv_disk);
// Deallocate the data sectors of the directory
the_dir_header.deallocate(free_map);
@ -489,7 +489,7 @@ impl Filesys {
parent_dir.remove(dir_name);
// Flush everything to disk
free_map.write_back(self.free_map_file);
free_map.write_back(&mut self.free_map_file, &mut drv_disk);
parent_dir.write_back(parent_dir_file);
Ok(())

View File

@ -37,11 +37,11 @@ pub fn copy(from: String, to: String, file_sys : Filesys, mut drv_disk : DrvDisk
let file_length = file_length_buf[0];
file_sys.create(to, file_length as i32, file_sys, drv_disk);
let open_file_opt = file_sys.open(to, file_sys, drv_disk);
let mut open_file_opt = file_sys.open(to, file_sys, drv_disk);
let open_file : &mut OpenFile;
match open_file_opt {
Some(f) => {
open_file = f;
open_file = &mut f;
},
None => return
}
@ -67,11 +67,11 @@ pub fn copy(from: String, to: String, file_sys : Filesys, mut drv_disk : DrvDisk
///
/// - **name** of the BurritOS file
pub fn print(name: String, file_sys : Filesys, mut drv_disk : DrvDisk) {
let open_file_opt = file_sys.open(name, file_sys, drv_disk);
let mut open_file_opt = file_sys.open(name, file_sys, drv_disk);
let open_file : &mut OpenFile;
match open_file_opt {
Some(f) => {
open_file = f;
Some(mut f) => {
open_file = &mut f;
},
None => return
}