Factor out file reading
This commit is contained in:
		
							parent
							
								
									20e1bf7fc8
								
							
						
					
					
						commit
						3990557849
					
				|  | @ -4,6 +4,7 @@ | |||
| 
 | ||||
| extern crate alloc; | ||||
| 
 | ||||
| use alloc::vec::Vec; | ||||
| use core::ops::Deref; | ||||
| use log::debug; | ||||
| use uefi::{ | ||||
|  | @ -13,7 +14,7 @@ use uefi::{ | |||
|         device_path::DevicePath, | ||||
|         loaded_image::LoadedImage, | ||||
|         media::{ | ||||
|             file::{Directory, File, FileAttribute, FileMode}, | ||||
|             file::{Directory, File, FileAttribute, FileMode, RegularFile}, | ||||
|             fs::SimpleFileSystem, | ||||
|         }, | ||||
|     }, | ||||
|  | @ -79,6 +80,24 @@ unsafe fn root_directory(image: Handle, boot_services: &BootServices) -> Result< | |||
|     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] | ||||
| fn main(handle: Handle, mut system_table: SystemTable<Boot>) -> Status { | ||||
|     uefi_services::init(&mut system_table).unwrap(); | ||||
|  | @ -98,12 +117,10 @@ fn main(handle: Handle, mut system_table: SystemTable<Boot>) -> Status { | |||
| 
 | ||||
|     debug!("Opened file"); | ||||
| 
 | ||||
|     let mut buf = [0; 512]; | ||||
| 
 | ||||
|     let bytes_read = file.read(&mut buf).unwrap(); | ||||
|     let data = &buf[0..bytes_read]; | ||||
| 
 | ||||
|     debug!("Data: {}", alloc::str::from_utf8(data).unwrap()); | ||||
|     debug!( | ||||
|         "Data: {}", | ||||
|         alloc::str::from_utf8(&read_all(&mut file).unwrap()).unwrap() | ||||
|     ); | ||||
| 
 | ||||
|     Status::SUCCESS | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Julian Stecklina
						Julian Stecklina