#![cfg_attr(test, allow(clippy::unwrap_used, clippy::expect_used))]
mod boot;
mod bytes;
mod dirent;
mod error;
mod exfat;
mod fat;
mod fs;
mod time;
#[cfg(feature = "vfs")]
mod vfs;
pub use boot::{FatVariant, Geometry};
pub use error::{FatError, Result};
pub use exfat::{boot_checksum, parse_boot as parse_exfat_boot};
pub use fs::{FatFs, FileId, Node};
pub use time::FatTimestamp;
#[cfg(fuzzing)]
#[doc(hidden)]
pub mod __fuzz {
use crate::boot::{FatVariant, Geometry};
pub fn parse_bpb(data: &[u8]) {
let _ = Geometry::parse(data);
}
pub fn parse_exfat_boot(data: &[u8]) {
let _ = crate::exfat::parse_boot(data);
}
pub fn parse_dir_entry(data: &[u8]) {
let _ = crate::dirent::parse_directory(data);
}
pub fn parse_exfat_dir(data: &[u8]) {
let _ = crate::exfat::parse_directory(data);
}
pub fn walk_fat_chain(data: &[u8]) {
if data.len() < 5 {
return;
}
let variant = match data[0] & 3 {
0 => FatVariant::Fat12,
1 => FatVariant::Fat16,
2 => FatVariant::Fat32,
_ => FatVariant::ExFat,
};
let start = u32::from_le_bytes([data[1], data[2], data[3], data[4]]);
let _ = crate::fat::follow_chain(&data[5..], variant, start, 100_000);
}
}