
UEFI paths can be of 4 types: 1. Absolute Shell Path: Uses shell mappings 2. Absolute Device Path: this is what we want 3: Relative root: path relative to the current root. 4: Relative Absolute shell path can be identified with `:` and Absolute Device path can be identified with `/`. Relative root path will start with `\`. The algorithm is mostly taken from edk2 UEFI shell implementation and is somewhat simple. Check for the path type in order. For Absolute Shell path, use `EFI_SHELL->GetDevicePathFromMap` to get a BorrowedDevicePath for the volume. For Relative paths, we use the current working directory to construct the new path. BorrowedDevicePath abstraction is needed to interact with `EFI_SHELL->GetDevicePathFromMap` which returns a Device Path Protocol with the lifetime of UEFI shell. Absolute Shell paths cannot exist if UEFI shell is missing. Signed-off-by: Ayush Singh <ayush@beagleboard.org>
18 lines
499 B
Rust
18 lines
499 B
Rust
cfg_if::cfg_if! {
|
|
if #[cfg(target_os = "windows")] {
|
|
mod windows;
|
|
pub use windows::*;
|
|
} else if #[cfg(all(target_vendor = "fortanix", target_env = "sgx"))] {
|
|
mod sgx;
|
|
pub use sgx::*;
|
|
} else if #[cfg(target_os = "solid_asp3")] {
|
|
mod unsupported_backslash;
|
|
pub use unsupported_backslash::*;
|
|
} else if #[cfg(target_os = "uefi")] {
|
|
mod uefi;
|
|
pub use uefi::*;
|
|
} else {
|
|
mod unix;
|
|
pub use unix::*;
|
|
}
|
|
}
|