mirror of
https://github.com/Noratrieb/zwergli.git
synced 2026-01-14 10:25:00 +01:00
32 lines
749 B
Rust
32 lines
749 B
Rust
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();
|
|
}
|