no more errors in filesys & fsmisc... for now
This commit is contained in:
parent
dae609c6ed
commit
85e999a7b0
@ -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
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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
|
||||
|
@ -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(())
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user