cramfs 0.1.0

A Rust implementation of the CRAMFS filesystem (read-only)
Documentation
use cramfs::{Cramfs, DirEntry};
use std::{fs::File, path::Path};

fn main() {
    unsafe { std::env::set_var("RUST_LOG", "trace") };
    env_logger::init();

    let path = std::env::args().skip(1).next();

    let Some(path) = path else {
        println!("need a path to a cramfs file");
        return;
    };

    let folder = Path::new(&path).parent().unwrap();
    let cramfs = Cramfs::from_file(&path).unwrap();
    let root = cramfs.root().unwrap();
    walk(root, folder);
}

fn walk(mut entry: DirEntry<File>, folder: &Path) {
    if entry.is_dir() {
        println!("{}", entry.path().display());

        let rd = entry.read_dir().unwrap();
        for entry in rd {
            let entry = entry.unwrap();
            walk(entry, folder);
        }
    } else if entry.is_file() {
        println!("{}", entry.path().display());

        let mut file = File::create(folder.join(entry.path())).unwrap();
        entry.read_file(&mut file).unwrap();
    } else if entry.is_symlink() {
        println!("{}", entry.path().display());
    }
}