Merge branch 'disk' of gitlab.istic.univ-rennes1.fr:simpleos/burritos into disk
This commit is contained in:
commit
dae609c6ed
@ -73,7 +73,7 @@ pub fn find_dir(name: &mut String, file_sys : Filesys, drv_disk : DrvDisk) -> i3
|
|||||||
}
|
}
|
||||||
|
|
||||||
let file = OpenFile::open_file(sector);
|
let file = OpenFile::open_file(sector);
|
||||||
if file.get_file_header().is_dir() {
|
if file.hdr.is_dir() {
|
||||||
directory.fetch_from(file);
|
directory.fetch_from(file);
|
||||||
} else {
|
} else {
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -4,6 +4,8 @@ pub const BITS_IN_WORD: usize = 32;
|
|||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::{Cursor, Write, Read};
|
use std::io::{Cursor, Write, Read};
|
||||||
|
|
||||||
|
use crate::drivers::drv_disk::{self, DrvDisk};
|
||||||
|
use crate::filesys::openfile::OpenFile;
|
||||||
use crate::simulator::disk::SECTOR_SIZE;
|
use crate::simulator::disk::SECTOR_SIZE;
|
||||||
|
|
||||||
pub struct BitMap {
|
pub struct BitMap {
|
||||||
@ -21,11 +23,10 @@ impl BitMap {
|
|||||||
/// - **nitems** is the number of bits in the bitmap.
|
/// - **nitems** is the number of bits in the bitmap.
|
||||||
///----------------------------------------------------------------------
|
///----------------------------------------------------------------------
|
||||||
pub fn init_bitmap(n_items: usize) -> BitMap {
|
pub fn init_bitmap(n_items: usize) -> BitMap {
|
||||||
let mut tmp: Vec<u32>;
|
|
||||||
BitMap{
|
BitMap{
|
||||||
num_bits: n_items,
|
num_bits: n_items,
|
||||||
num_words: (n_items + SECTOR_SIZE as usize -1) / SECTOR_SIZE as usize,
|
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
|
/// ### Parameters
|
||||||
/// - **file** is the place to read the bitmap from
|
/// - **file** is the place to read the bitmap from
|
||||||
pub fn fetch_from(&mut self, file_path: &str) -> std::io::Result<&Vec<u32>> {
|
pub fn fetch_from(&mut self, file: &mut OpenFile, drv_disk: &mut DrvDisk) -> std::io::Result<&Vec<u32>> {
|
||||||
// Ouvre le fichier en mode lecture seule
|
let mut num_bytes = self.num_words * std::mem::size_of::<u32>();
|
||||||
let mut file = File::open(file_path)?;
|
|
||||||
|
|
||||||
// Lit les octets du fichier dans un buffer
|
|
||||||
let mut buffer = vec![0; self.num_words * std::mem::size_of::<u32>()];
|
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
|
// Convertit les octets en vecteur de u32
|
||||||
self.map = vec![0; self.num_words];
|
self.map = vec![0; self.num_words];
|
||||||
@ -125,19 +124,17 @@ impl BitMap {
|
|||||||
///
|
///
|
||||||
/// ### Paramenters
|
/// ### Paramenters
|
||||||
/// - **file** is the place to write the bitmap to
|
/// - **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
|
// Encapsule le vecteur dans un std::io::Cursor pour l'utiliser comme un std::io::Write
|
||||||
let mut cursor = Cursor::new(Vec::<u8>::new());
|
let mut cursor = Cursor::new(Vec::<u8>::new());
|
||||||
for u32_val in self.map.as_mut_slice() {
|
for u32_val in self.map.as_mut_slice() {
|
||||||
cursor.write_all(&u32_val.to_le_bytes())?;
|
cursor.write_all(&u32_val.to_le_bytes())?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ouvre le fichier en mode écriture
|
OpenFile::read_at(drv_disk, file, &mut cursor.into_inner(), num_bytes as i32, 0);
|
||||||
let mut file = File::create(file_path)?;
|
|
||||||
|
|
||||||
// Écrit les données dans le fichier
|
// Écrit les données dans le fichier
|
||||||
file.write_all(&cursor.into_inner())?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user