#mbr #no-std

no-std ape-mbr

simple crate to interface between a disk and it's partitions

2 releases

0.1.1 May 17, 2023
0.1.0 Apr 22, 2023

#1154 in Filesystem

MIT license

22KB
375 lines

ApeMBR

MIT License Crates.io Documentation APE

simple crate to interface between a disk and it's partitions

This crate is especially designed to provide an interface between a disk and a file system library, where both are able to implement embedded_io.

Dead simple, as it should be.

Usage

This crate can be used by adding ape-mbr to the dependencies in your project's Cargo.toml.

[dependencies]
ape-mbr = "0.1.0"

Examples

Here's ape-mbr being coupled with ape-fatfs

use std::io::prelude::*;
use ape_fatfs::{
    fs::{
        FsOptions,
        FileSystem,
    },
    io::{
        StdIoWrapper
    }
};

use ape_mbr::{
    PartitionId,
    MBR,
};

fn main() {
    // Initialize the MBR
    let img_file = std::fs::OpenOptions::new().read(true).write(true)
        .open("test.img").unwrap();

    let img_file = StdIoWrapper::new(img_file);
   
    let mut mbr = MBR::new(img_file).unwrap();
    let mut p1 = mbr.get_partition(PartitionId::One).unwrap();
    
    let fs = FileSystem::new(p1, FsOptions::new()).unwrap();
    let root_dir = fs.root_dir();

    // Write a file
    root_dir.create_dir("foo").unwrap();
    let mut file = root_dir.create_file("foo/hello.txt").unwrap();
    file.truncate().unwrap();
    file.write_all(b"Hello World!").unwrap();

    // Read a directory
    let dir = root_dir.open_dir("foo").unwrap();
    for r in dir.iter() {
        let entry = r.unwrap();
        println!("{}", entry.file_name());
    }
}

Dependencies

~0.4–0.9MB
~20K SLoC