Skip to content
Snippets Groups Projects
mkfs.rs 1.95 KiB
Newer Older
#![deny(warnings)]

extern crate redoxfs;
Jeremy Soller's avatar
Jeremy Soller committed
extern crate uuid;
use std::{env, fs, process, time};
use std::io::Read;
Jeremy Soller's avatar
Jeremy Soller committed
use uuid::Uuid;
    let mut args = env::args().skip(1);

    let disk_path = if let Some(path) = args.next() {
        path
    } else {
        println!("redoxfs-mkfs: no disk image provided");
        println!("redoxfs-mkfs DISK [BOOTLOADER]");
        process::exit(1);
    };

    let bootloader_path_opt = args.next();

    let disk = match DiskFile::open(&disk_path) {
        Ok(disk) => disk,
        Err(err) => {
            println!("redoxfs-mkfs: failed to open image {}: {}", disk_path, err);
            process::exit(1);
        }
    };

    let mut bootloader = vec![];
    if let Some(bootloader_path) = bootloader_path_opt {
        match fs::File::open(&bootloader_path) {
            Ok(mut file) => match file.read_to_end(&mut bootloader) {
                Ok(_) => (),
Jeremy Soller's avatar
Jeremy Soller committed
                Err(err) => {
                    println!("redoxfs-mkfs: failed to read bootloader {}: {}", bootloader_path, err);
Jeremy Soller's avatar
Jeremy Soller committed
                    process::exit(1);
                }
Jeremy Soller's avatar
Jeremy Soller committed
            Err(err) => {
                println!("redoxfs-mkfs: failed to open bootloader {}: {}", bootloader_path, err);
Jeremy Soller's avatar
Jeremy Soller committed
                process::exit(1);
            }
    };

    let ctime = time::SystemTime::now().duration_since(time::UNIX_EPOCH).unwrap();
    match FileSystem::create_reserved(disk, &bootloader, ctime.as_secs(), ctime.subsec_nanos()) {
        Ok(filesystem) => {
Jeremy Soller's avatar
Jeremy Soller committed
            let uuid = Uuid::from_bytes(&filesystem.header.1.uuid).unwrap();
            println!("redoxfs-mkfs: created filesystem on {}, reserved {} blocks, size {} MB, uuid {}", disk_path, filesystem.block, filesystem.header.1.size/1000/1000, uuid.hyphenated());
        },
        Err(err) => {
            println!("redoxfs-mkfs: failed to create filesystem on {}: {}", disk_path, err);
            process::exit(1);
        }