diff --git a/src/filesys/filehdr.rs b/src/filesys/filehdr.rs index e3d800c..c63f21b 100644 --- a/src/filesys/filehdr.rs +++ b/src/filesys/filehdr.rs @@ -1,3 +1,4 @@ +use crate::drivers::drv_disk; use crate::{simulator::disk::SECTOR_SIZE, utility::bitmap::BitMap}; pub const MAX_HEADER_SECTORS: i32 = 32; pub const DATAS_IN_FIRST_SECTOR: i32 = (SECTOR_SIZE - 5 * 8) /8 ; @@ -19,13 +20,12 @@ pub struct FileHdr { data_sectors: Vec, num_header_sectors: i32, header_sectors: [i32; MAX_HEADER_SECTORS as usize], - drv_disk: DrvDisk, } impl FileHdr { - pub fn init_file_hdr(drv_disk_: DrvDisk) -> FileHdr { + pub fn init_file_hdr() -> FileHdr { FileHdr { is_dir: 0, num_bytes: 0, @@ -33,7 +33,6 @@ impl FileHdr { data_sectors: Vec::new(), num_header_sectors: 0, header_sectors: [0;MAX_HEADER_SECTORS as usize], - drv_disk: drv_disk_, } } @@ -102,7 +101,9 @@ impl FileHdr { } } - fn fetch_from(&mut self, sector: i32) { + ///Fetch contents of file header from disk. + 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::() ]; let mut data_sectors = vec![0; MAX_DATA_SECTORS as usize]; @@ -111,7 +112,7 @@ impl FileHdr { // Read the header from the disk // and put it in the temporary buffer - DrvDisk::read_sector(&mut self.drv_disk, sector, &mut sector_img); + DrvDisk::read_sector(&mut drv_disk, sector, &mut sector_img); // Set up the memory image of the file header // from the newly read buffer @@ -134,7 +135,7 @@ impl FileHdr { // Fill the temporary buffer with zeroes sector_img.fill(0); - DrvDisk::read_sector(&mut self.drv_disk, self.header_sectors[i], &mut sector_img); + DrvDisk::read_sector(&mut drv_disk, self.header_sectors[i], &mut sector_img); for j in 0..DATAS_IN_SECTOR as usize { data_sectors[DATAS_IN_FIRST_SECTOR as usize + i * DATAS_IN_SECTOR as usize + j] = sector_img[j]; @@ -148,8 +149,7 @@ impl FileHdr { } - - fn write_back(&self, sector: i32) { + 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 @@ -170,7 +170,7 @@ impl FileHdr { // Write the first header sector into disk *FileHdr::next_header_sector(&mut sector_img) = self.header_sectors[0]; let mut vec_u8: Vec = sector_img.iter().map(|&x| x as u8).collect(); - DrvDisk::write_sector(&mut self.drv_disk, sector, &mut vec_u8); + DrvDisk::write_sector(&mut drv_disk, sector, &mut vec_u8); // Write the following header sectors into disk for i in 0..self.num_header_sectors { @@ -186,12 +186,12 @@ impl FileHdr { *FileHdr::next_header_sector(&mut sector_img) = 0; } let mut vec_u8: Vec = sector_img.iter().map(|&x| x as u8).collect(); - DrvDisk::write_sector(&mut self.drv_disk, self.header_sectors[i as usize], &mut vec_u8); + DrvDisk::write_sector(&mut drv_disk, self.header_sectors[i as usize], &mut vec_u8); } } pub fn next_header_sector(hdr_sector: &mut [i32]) -> &mut i32 { - let sector_size = SECTOR_SIZE as usize/ std::mem::size_of::(); + let sector_size = SECTOR_SIZE as usize / std::mem::size_of::(); &mut hdr_sector[sector_size - 1] } @@ -213,7 +213,7 @@ impl FileHdr { return self.num_sectors * SECTOR_SIZE; } - pub fn print(&self) { + pub fn print(&self, drv_disk: &mut DrvDisk) { let mut data = Vec::new(); println!("FileHeader contents. File size: {}. File blocks:", self.num_bytes); for i in 0..self.num_sectors { @@ -222,8 +222,6 @@ impl FileHdr { println!("\nFile contents:"); let mut k = 0; for i in 0..self.num_sectors { - let disk = Disk::init_disk(); - let mut drv_disk = DrvDisk::init_drv_disk(disk); drv_disk.read_sector(self.data_sectors[i as usize], &mut data); for j in 0..SECTOR_SIZE.min(self.num_bytes - k) { let c = data[j as usize]; @@ -252,9 +250,6 @@ impl FileHdr { } - - - #[cfg(test)] mod test {