more impl open file

This commit is contained in:
Moysan Gabriel 2023-04-04 20:37:10 +02:00
parent 2549103636
commit 61b3643945

View File

@ -76,19 +76,14 @@ impl OpenFile {
}
first_sector = div_round_down(position,disk::SECTOR_SIZE);
last_sector = div_round_up(position + num_bytes - 1, disk::SECTOR_SIZE);
last_sector = div_round_down(position + num_bytes - 1, disk::SECTOR_SIZE);
num_sectors = last_sector - first_sector + 1;
let mut buffer = vec![0_u8; (num_sectors * disk::SECTOR_SIZE) as usize];
let mut sector_buffer = vec![0_u8; disk::SECTOR_SIZE as usize];
for i in first_sector..(last_sector + 1){
DrvDisk::read_sector(driver_disk, i, &mut sector_buffer);
for j in 0..sector_buffer.len(){
buffer.push(sector_buffer[j]);
}
DrvDisk::read_sector(driver_disk, i, &mut buffer);
}
start = position%disk::SECTOR_SIZE;
@ -133,7 +128,46 @@ impl OpenFile {
else if position + num_bytes > file_length{
file.hdr.change_file_length(position + num_bytes);
}
0
first_sector = div_round_down(position, disk::SECTOR_SIZE);
last_sector = div_round_down(position + nbr_octet_ecrit - 1, disk::SECTOR_SIZE);
nbr_sectors = last_sector + first_sector + 1;
let mut buffer = vec![0_u8; (nbr_sectors * disk::SECTOR_SIZE) as usize];
let mut sector_buffer = vec![0_u8; disk::SECTOR_SIZE as usize];
first_aligned = position == first_sector*disk::SECTOR_SIZE;//to use
last_aligned = position + nbr_octet_ecrit == (last_sector + 1)*disk::SECTOR_SIZE;//to use
/*
A CHANGER
les read & write de disk prenant en param des vec, on ne peut pour l'instant pas copier premier et dernier secteur si mauvais alignement
par defaut, on reconpie tout les secteur du disk de premier a dernier dans buffer, puis on ecrase avec les données dans from
*/
//on recopie tous les secteurs dans buffer
for i in first_sector..(last_sector + 1){
driver_disk.read_sector(i, &mut buffer)
}
//on ecrase dans buffer avec les données de from
let start = position%disk::SECTOR_SIZE;
let end = start + nbr_octet_ecrit - 1;
for i in start..(end + 1){
buffer[i as usize] = from[(i-start) as usize];
}
//on ecrit, secteur par secteur, en segmentant buffer en secteurs
for i in 0..(nbr_sectors + 1){
let j = i*disk::SECTOR_SIZE;
let k = i + disk::SECTOR_SIZE - 1;
//driver_disk.write_sector(i + first_sector, &buffer[i..=k]);
//BESOIN DE CHANGER VEC U8 EN SLICE DANS les fonctions read & write de drv_disk & disk
}
nbr_octet_ecrit
}
pub fn read(driver_disk : &mut DrvDisk, file : &mut OpenFile, into : &mut Vec<u8>, num_bytes : i32) -> i32 {