//! A high-level file system API for UEFI applications close to the `std::fs` //! module from Rust's standard library. The main export of this module is //! [`FileSystem`]. //! //! # Difference to typical File System Abstractions //! Users perform actions on dedicated volumes: For example, the boot volume, //! such as a CD-rom, USB-stick, or any other storage device. //! //! Unlike in the API of typical UNIX file system abstractions, there is //! no virtual file system. Unlike in Windows, there is no way to access volumes //! by a dedicated name. //! //! # Paths //! All paths are absolute and follow the FAT-like file system conventions for //! paths. Thus, there is no current working directory and path components //! like `.` and `..` are not supported. In other words, the current working //! directory is always `/`, i.e., the root, of the opened volume. //! //! Symlinks or hard-links are not supported but only directories and regular //! files with plain linear paths to them. For more information, see //! [`Path`] and [`PathBuf`]. //! //! ## Use `&str` as Path //! A `&str` known at compile time can be converted to a [`Path`] using the //! [`cstr16!`] macro. During runtime, you can create a path like this: //! //! ```no_run //! use uefi::CString16; //! use uefi::fs::{FileSystem, FileSystemResult}; //! use uefi::proto::media::fs::SimpleFileSystem; //! use uefi::boot::{self, ScopedProtocol}; //! //! fn read_file(path: &str) -> FileSystemResult> { //! let path: CString16 = CString16::try_from(path).unwrap(); //! let fs: ScopedProtocol = boot::get_image_file_system(boot::image_handle()).unwrap(); //! let mut fs = FileSystem::new(fs); //! fs.read(path.as_ref()) //! } //! ``` //! //! # API Hints //! There is no `File` abstraction as in the Rust `std` library. Instead, it is //! intended to work with the file system via dedicated functions, similar to //! the public functions of the `std::fs` module. //! //! There is no automatic synchronization of the file system for concurrent //! accesses. This is in the responsibility of the user. //! //! [`cstr16!`]: crate::cstr16 mod dir_entry_iter; mod file_system; mod path; mod uefi_types; pub use dir_entry_iter::*; pub use file_system::*; pub use path::*; use uefi_types::*;