Merge branch 'disk' of gitlab.istic.univ-rennes1.fr:simpleos/burritos into disk

This commit is contained in:
Baptiste 2023-04-05 16:50:05 +02:00
commit dae609c6ed
2 changed files with 11 additions and 14 deletions

View File

@ -73,7 +73,7 @@ pub fn find_dir(name: &mut String, file_sys : Filesys, drv_disk : DrvDisk) -> i3
}
let file = OpenFile::open_file(sector);
if file.get_file_header().is_dir() {
if file.hdr.is_dir() {
directory.fetch_from(file);
} else {
return -1;

View File

@ -4,6 +4,8 @@ pub const BITS_IN_WORD: usize = 32;
use std::fs::File;
use std::io::{Cursor, Write, Read};
use crate::drivers::drv_disk::{self, DrvDisk};
use crate::filesys::openfile::OpenFile;
use crate::simulator::disk::SECTOR_SIZE;
pub struct BitMap {
@ -21,11 +23,10 @@ impl BitMap {
/// - **nitems** is the number of bits in the bitmap.
///----------------------------------------------------------------------
pub fn init_bitmap(n_items: usize) -> BitMap {
let mut tmp: Vec<u32>;
BitMap{
num_bits: n_items,
num_words: (n_items + SECTOR_SIZE as usize -1) / SECTOR_SIZE as usize,
map: tmp,
map: vec![0,n_items as u32],
}
}
@ -100,13 +101,11 @@ impl BitMap {
///
/// ### Parameters
/// - **file** is the place to read the bitmap from
pub fn fetch_from(&mut self, file_path: &str) -> std::io::Result<&Vec<u32>> {
// Ouvre le fichier en mode lecture seule
let mut file = File::open(file_path)?;
pub fn fetch_from(&mut self, file: &mut OpenFile, drv_disk: &mut DrvDisk) -> std::io::Result<&Vec<u32>> {
let mut num_bytes = self.num_words * std::mem::size_of::<u32>();
// Lit les octets du fichier dans un buffer
let mut buffer = vec![0; self.num_words * std::mem::size_of::<u32>()];
file.read_exact(&mut buffer)?;
OpenFile::read(drv_disk, file, &mut buffer, num_bytes as i32);
// Convertit les octets en vecteur de u32
self.map = vec![0; self.num_words];
@ -125,19 +124,17 @@ impl BitMap {
///
/// ### Paramenters
/// - **file** is the place to write the bitmap to
pub fn write_back(&mut self, file_path: &str) -> std::io::Result<()> {
pub fn write_back(&mut self, file: &mut OpenFile, drv_disk: &mut DrvDisk) -> std::io::Result<()> {
let mut num_bytes = self.num_words * std::mem::size_of::<u32>();
// Encapsule le vecteur dans un std::io::Cursor pour l'utiliser comme un std::io::Write
let mut cursor = Cursor::new(Vec::<u8>::new());
for u32_val in self.map.as_mut_slice() {
cursor.write_all(&u32_val.to_le_bytes())?;
}
// Ouvre le fichier en mode écriture
let mut file = File::create(file_path)?;
OpenFile::read_at(drv_disk, file, &mut cursor.into_inner(), num_bytes as i32, 0);
// Écrit les données dans le fichier
file.write_all(&cursor.into_inner())?;
Ok(())
}
}