(
guest_mem: &M,
guest_addr: GuestAddress,
uefi_image: &mut F,
)
| 28 | type Result<T> = result::Result<T, Error>; |
| 29 | |
| 30 | pub fn load_uefi<F, M: GuestMemory>( |
| 31 | guest_mem: &M, |
| 32 | guest_addr: GuestAddress, |
| 33 | uefi_image: &mut F, |
| 34 | ) -> Result<()> |
| 35 | where |
| 36 | F: Read + Seek + AsFd, |
| 37 | { |
| 38 | let uefi_size = uefi_image |
| 39 | .seek(SeekFrom::End(0)) |
| 40 | .map_err(|_| Error::SeekUefiEnd)? as usize; |
| 41 | |
| 42 | // edk2 image on virtual platform is smaller than 3M |
| 43 | if uefi_size > 0x300000 { |
| 44 | return Err(Error::UefiTooBig); |
| 45 | } |
| 46 | uefi_image.rewind().map_err(|_| Error::SeekUefiStart)?; |
| 47 | guest_mem |
| 48 | .read_exact_volatile_from(guest_addr, &mut uefi_image.as_fd(), uefi_size) |
| 49 | .map_err(|_| Error::ReadUefiImage) |
| 50 | } |
no test coverage detected