Factor out file reading
This commit is contained in:
parent
20e1bf7fc8
commit
3990557849
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
extern crate alloc;
|
extern crate alloc;
|
||||||
|
|
||||||
|
use alloc::vec::Vec;
|
||||||
use core::ops::Deref;
|
use core::ops::Deref;
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use uefi::{
|
use uefi::{
|
||||||
|
@ -13,7 +14,7 @@ use uefi::{
|
||||||
device_path::DevicePath,
|
device_path::DevicePath,
|
||||||
loaded_image::LoadedImage,
|
loaded_image::LoadedImage,
|
||||||
media::{
|
media::{
|
||||||
file::{Directory, File, FileAttribute, FileMode},
|
file::{Directory, File, FileAttribute, FileMode, RegularFile},
|
||||||
fs::SimpleFileSystem,
|
fs::SimpleFileSystem,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -79,6 +80,24 @@ unsafe fn root_directory(image: Handle, boot_services: &BootServices) -> Result<
|
||||||
file_system.open_volume()
|
file_system.open_volume()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn read_all(image: &mut RegularFile) -> Result<Vec<u8>> {
|
||||||
|
let mut buf = Vec::new();
|
||||||
|
|
||||||
|
// TODO Can we do this nicer?
|
||||||
|
loop {
|
||||||
|
let mut chunk = [0; 512];
|
||||||
|
let read_bytes = image.read(&mut chunk).map_err(|e| e.status())?;
|
||||||
|
|
||||||
|
if read_bytes == 0 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.extend_from_slice(&chunk[0..read_bytes]);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(buf)
|
||||||
|
}
|
||||||
|
|
||||||
#[entry]
|
#[entry]
|
||||||
fn main(handle: Handle, mut system_table: SystemTable<Boot>) -> Status {
|
fn main(handle: Handle, mut system_table: SystemTable<Boot>) -> Status {
|
||||||
uefi_services::init(&mut system_table).unwrap();
|
uefi_services::init(&mut system_table).unwrap();
|
||||||
|
@ -98,12 +117,10 @@ fn main(handle: Handle, mut system_table: SystemTable<Boot>) -> Status {
|
||||||
|
|
||||||
debug!("Opened file");
|
debug!("Opened file");
|
||||||
|
|
||||||
let mut buf = [0; 512];
|
debug!(
|
||||||
|
"Data: {}",
|
||||||
let bytes_read = file.read(&mut buf).unwrap();
|
alloc::str::from_utf8(&read_all(&mut file).unwrap()).unwrap()
|
||||||
let data = &buf[0..bytes_read];
|
);
|
||||||
|
|
||||||
debug!("Data: {}", alloc::str::from_utf8(data).unwrap());
|
|
||||||
|
|
||||||
Status::SUCCESS
|
Status::SUCCESS
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue