use std::ffi::CStr; fn main() { let gz = std::env::args().nth(1).unwrap(); let gz = std::fs::read(gz).unwrap(); assert_eq!(gz[0], 31, "ID"); assert_eq!(gz[1], 139, "ID"); assert_eq!(gz[2], 8, "compression method"); let flg = gz[3]; assert!(flg == 8 || flg == 0); // only FLG.FNAME let mut data_start = 10; if flg & 0b1000 != 0 { let fname = CStr::from_bytes_until_nul(&gz[10..]).unwrap(); dbg!(fname); data_start += fname.count_bytes() + 1; } let blocks = &gz[(data_start)..]; let blocks = &blocks[..(blocks.len() - 8)]; // crc32 and isize let mut out = Vec::new(); zwergli::inflate(blocks, &mut out); dbg!(&out); dbg!(String::from_utf8(out)).ok(); }