use crate::platform;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[repr(C)]
pub struct SuperBlock {
pub inodes_count: u32,
pub blocks_count_low: u32,
pub reserved_blocks_count_low: u32,
pub free_blocks_count_low: u32,
pub free_inodes_count: u32,
pub first_data_block: u32,
pub log_block_size: u32,
pub log_cluster_size: u32,
pub blocks_per_group: u32,
pub clusters_per_group: u32,
pub inodes_per_group: u32,
pub mtime: u32,
pub wtime: u32,
pub mount_count: u16,
pub max_mount_count: u16,
pub magic: u16,
pub state: u16,
pub errors: u16,
pub minor_revision_level: u16,
pub last_check: u32,
pub check_interval: u32,
pub creator_os: u32,
pub revision_level: u32,
pub default_reserved_uid: u16,
pub default_reserved_gid: u16,
pub first_inode: u32,
pub inode_size: u16,
pub block_group_nr: u16,
pub feature_compat: u32,
pub feature_incompat: u32,
pub feature_ro_compat: u32,
pub uuid: [u8; 16],
pub volume_name: [u8; 16],
pub last_mounted: [u8; 64],
pub algorithm_usage_bitmap: u32,
pub prealloc_blocks: u8,
pub prealloc_dir_blocks: u8,
pub reserved_gdt_blocks: u16,
pub journal_uuid: [u8; 16],
pub journal_inum: u32,
pub journal_dev: u32,
pub last_orphan: u32,
pub hash_seed: [u32; 4],
pub def_hash_version: u8,
pub journal_backup_type: u8,
pub desc_size: u16,
pub default_mount_opts: u32,
pub first_meta_bg: u32,
pub mkfs_time: u32,
pub journal_blocks: [u32; 17],
pub blocks_count_high: u32,
pub reserved_blocks_count_high: u32,
pub free_blocks_count_high: u32,
pub min_extra_isize: u16,
pub want_extra_isize: u16,
pub flags: u32,
pub raid_stride: u16,
pub mmp_interval: u16,
pub mmp_block: u64,
pub raid_stripe_width: u32,
pub log_groups_per_flex: u8,
pub checksum_type: u8,
pub reserved_pad: u16,
pub kbytes_written: u64,
pub snapshot_inum: u32,
pub snapshot_id: u32,
pub snapshot_r_blocks_count: u64,
pub snapshot_list: u32,
pub error_count: u32,
pub first_error_time: u32,
pub first_error_inode: u32,
pub first_error_block: u64,
pub first_error_func: [u8; 32],
pub first_error_line: u32,
pub last_error_time: u32,
pub last_error_inode: u32,
pub last_error_line: u32,
pub last_error_block: u64,
pub last_error_func: [u8; 32],
pub mount_opts: [u8; 64],
pub user_quota_inum: u32,
pub group_quota_inum: u32,
pub overhead_blocks: u32,
pub backup_bgs: [u32; 2],
pub encrypt_algos: [u8; 4],
pub encrypt_pw_salt: [u8; 16],
pub lpf_inode: u32,
pub project_quota_inum: u32,
pub checksum_seed: u32,
pub wtime_high: u8,
pub mtime_high: u8,
pub mkfs_time_high: u8,
pub lastcheck_high: u8,
pub first_error_time_high: u8,
pub last_error_time_high: u8,
pub pad: [u8; 2],
pub reserved: [u32; 96],
pub checksum: u32,
}
unsafe impl platform::Plain for SuperBlock {}
impl SuperBlock {
pub fn block_size(&self) -> u32 {
1024_u32.checked_shl(self.log_block_size).unwrap_or(0)
}
}