pub const F2FS_BLKSIZE: usize = 4096;
pub const F2FS_BLK_CSUM_OFFSET: usize = F2FS_BLKSIZE - 4;
pub const F2FS_SUPER_MAGIC: u32 = 0xF2F5_2010;
pub fn f2fs_crc32(buf: &[u8]) -> u32 {
crate::crc::crc32_ieee_raw(F2FS_SUPER_MAGIC, buf)
}
pub const ADDRS_PER_INODE: usize = 923;
pub const NIDS_PER_INODE: usize = 5;
pub const NID_DIRECT_1: usize = 0;
pub const NID_DIRECT_2: usize = 1;
pub const NID_INDIRECT_1: usize = 2;
pub const NID_INDIRECT_2: usize = 3;
pub const NID_TRIPLE_INDIRECT: usize = 4;
pub const ADDRS_PER_BLOCK: usize = 1018;
pub const NIDS_PER_BLOCK: usize = 1018;
pub const NAT_ENTRY_SIZE: usize = 9;
pub const NAT_ENTRY_PER_BLOCK: usize = F2FS_BLKSIZE / NAT_ENTRY_SIZE;
pub const SUMMARY_SIZE: usize = 7;
pub const ENTRIES_IN_SUM: usize = F2FS_BLKSIZE / 8;
pub const SUM_ENTRY_SIZE: usize = SUMMARY_SIZE * ENTRIES_IN_SUM;
pub const SUM_FOOTER_SIZE: usize = 5;
pub const SUM_JOURNAL_SIZE: usize = F2FS_BLKSIZE - SUM_FOOTER_SIZE - SUM_ENTRY_SIZE;
pub const NAT_JOURNAL_ENTRY_SIZE: usize = 4 + NAT_ENTRY_SIZE;
pub const NAT_JOURNAL_ENTRIES: usize = (SUM_JOURNAL_SIZE - 2) / NAT_JOURNAL_ENTRY_SIZE;
pub const CP_MIN_CHKSUM_OFFSET: usize = 0xC0;
pub const CP_CHKSUM_OFFSET: usize = F2FS_BLK_CSUM_OFFSET;
pub const NR_DENTRY_IN_BLOCK: usize = 214;
pub const SIZE_OF_DIR_ENTRY: usize = 11;
pub const SIZE_OF_DENTRY_BITMAP: usize = 27;
pub const SIZE_OF_RESERVED: usize = 3;
pub const F2FS_SLOT_LEN: usize = 8;
pub const F2FS_INLINE_DATA: u8 = 0x02;
pub const F2FS_INLINE_DENTRY: u8 = 0x04;
pub const F2FS_INLINE_XATTR: u8 = 0x01;
pub const F2FS_DATA_EXIST: u8 = 0x08;
pub const CP_UMOUNT_FLAG: u32 = 0x0000_0001;
pub const CP_ORPHAN_PRESENT_FLAG: u32 = 0x0000_0002;
pub const CP_COMPACT_SUM_FLAG: u32 = 0x0000_0004;
pub const CP_ERROR_FLAG: u32 = 0x0000_0008;
pub const CP_FSCK_FLAG: u32 = 0x0000_0010;
pub const CP_FASTBOOT_FLAG: u32 = 0x0000_0020;
pub const CP_CRC_RECOVERY_FLAG: u32 = 0x0000_0040;
pub const CP_NAT_BITS_FLAG: u32 = 0x0000_0080;
pub const CP_TRIMMED_FLAG: u32 = 0x0000_0100;
pub const CP_NOCRC_RECOVERY_FLAG: u32 = 0x0000_0200;
pub const CP_LARGE_NAT_BITMAP_FLAG: u32 = 0x0000_0400;
pub const NULL_ADDR: u32 = 0;
pub const NEW_ADDR: u32 = u32::MAX - 1;
pub const S_IFMT: u16 = 0xF000;
pub const S_IFREG: u16 = 0x8000;
pub const S_IFDIR: u16 = 0x4000;
pub const S_IFLNK: u16 = 0xA000;
pub const S_IFCHR: u16 = 0x2000;
pub const S_IFBLK: u16 = 0x6000;
pub const S_IFIFO: u16 = 0x1000;
pub const S_IFSOCK: u16 = 0xC000;
pub const F2FS_FT_UNKNOWN: u8 = 0;
pub const F2FS_FT_REG_FILE: u8 = 1;
pub const F2FS_FT_DIR: u8 = 2;
pub const F2FS_FT_CHRDEV: u8 = 3;
pub const F2FS_FT_BLKDEV: u8 = 4;
pub const F2FS_FT_FIFO: u8 = 5;
pub const F2FS_FT_SOCK: u8 = 6;
pub const F2FS_FT_SYMLINK: u8 = 7;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn crc_matches_independent_reference() {
assert_eq!(f2fs_crc32(b""), F2FS_SUPER_MAGIC);
assert_eq!(f2fs_crc32(b"123456789"), 0x1657_A0C3);
assert_eq!(f2fs_crc32(b"f2fs superblock"), 0xA664_33E2);
}
}