hadris-udf 2.0.0-rc.2

Pure Rust UDF filesystem library for optical media and disk images with no-std support
Documentation

hadris-udf

A pure Rust Universal Disk Format (UDF) filesystem library for optical media and disk images, with std and no_std support. It is suitable for desktop image tools, bootloaders, kernels, firmware, and embedded systems.

UDF (ECMA-167) is the filesystem used for DVD-ROM, DVD-Video, DVD-RAM, Blu-ray discs, large USB drives (files >4GB), and packet writing to CD/DVD-RW.

Features

  • Read UDF 1.02 images (DVD-ROM)
  • Write/format UDF filesystems from scratch
  • no_std compatible (with alloc)
  • Descriptor-level access for building hybrid images

Quick Start

use std::fs::File;
use std::io::BufReader;
use hadris_udf::UdfFs;

let file = File::open("movie.udf").unwrap();
let reader = BufReader::new(file);
let udf = UdfFs::open(reader).unwrap();

let info = udf.info();
println!("Volume: {}", info.volume_id);

for entry in udf.root_dir().unwrap().entries() {
    println!("{}", entry.name());
}

Writing a UDF image

use hadris_udf::write::{UdfWriter, UdfWriteOptions, SimpleFile, SimpleDir};
use std::io::Cursor;

let mut buffer = vec![0u8; 10 * 1024 * 1024];
let mut cursor = Cursor::new(&mut buffer[..]);

let mut root = SimpleDir::new("");
root.add_file(SimpleFile::new("readme.txt", b"Hello, World!".to_vec()));

let options = UdfWriteOptions::default();
let output = UdfWriter::create(cursor, &root, options).expect("Create failed");
let _cursor = output.into_inner();

Feature Flags

Feature Default Description
read Yes Read support
alloc No Heap allocation without full std
std Yes Full standard library support
write No Write/format support (requires std)

Supported UDF Revisions

Revision Use case Status
UDF 1.02 DVD-ROM Supported
UDF 1.50 DVD-RAM, packet writing Planned
UDF 2.01 DVD-RW, streaming Planned
UDF 2.50 Blu-ray Planned

Specifications

  • ECMA-167: Volume and File Structure for Write-Once and Rewritable Media
  • OSTA UDF Specification (udf260.pdf)

License

MIT