use bytemuck::{Pod, Zeroable};
use crate::MB;
use std::time::{SystemTime, SystemTimeError, UNIX_EPOCH};
pub(super) const MAIN_BOOT_OFFSET: u64 = 0;
pub(super) const BACKUP_BOOT_OFFSET: u64 = 12;
pub(super) const MAX_CLUSTER_COUNT: u32 = 0xFFFFFFF5;
pub(super) const MAX_CLUSTER_SIZE: u32 = 32 * MB;
pub(super) const UPCASE_TABLE_SIZE_BYTES: u32 = 5836;
pub(super) const DRIVE_SELECT: u8 = 0x80;
pub(super) const BOOT_SIGNATURE: u16 = 0xAA55;
pub(super) const EXTENDED_BOOT_SIGNATURE: u32 = 0xAA550000;
pub(super) const EXTENDED_BOOT: u64 = 8;
pub(crate) const FIRST_USABLE_CLUSTER_INDEX: u32 = 2;
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub(super) struct FileSystemRevision {
vermin: u8,
vermaj: u8,
}
impl Default for FileSystemRevision {
fn default() -> Self {
Self {
vermin: 0,
vermaj: 1,
}
}
}
#[repr(transparent)]
#[derive(Copy, Clone, Debug, Pod, Zeroable)]
pub(super) struct VolumeSerialNumber(u32);
impl VolumeSerialNumber {
pub(super) fn try_new() -> Result<VolumeSerialNumber, SystemTimeError> {
let now = SystemTime::now().duration_since(UNIX_EPOCH)?;
Ok(VolumeSerialNumber((now.as_secs() as u32).to_le()))
}
}