3 releases

0.2.3 Oct 9, 2023
0.2.2 Oct 9, 2023
0.2.1 Sep 18, 2023
0.2.0 Sep 4, 2023

#674 in Filesystem

MIT/Apache

115KB
2.5K SLoC

cdfs

builds.sr.ht status docs.rs status

ISO 9660 / ECMA-119 filesystem implementation written in Rust. It's still very much a work-in-progress. The project overview lives at Sourcehut:

https://sr.ht/~az1/cdfs/

Usage

See the examples directory and the documentation for more information on how to use the cdfs library in your project.

If you're just interested in using cdfs to mount an ISO, there's a FUSE implementation included.

To install locally:

$ cargo install cdfs

   Compiling cdfs v0.2.2
    Finished release [optimized] target(s) in 21.97s
  Installing /home/user/.cargo/bin/cdfs_fuse
   Installed package `cdfs v0.2.2` (executable `cdfs_fuse`)
$ cdfs_fuse images/rockridge.iso mountpoint/
2023-09-06T00:00:00.203Z INFO  [cdfs_fuse] NOTE: The filesystem must be manually unmounted after exit
2023-09-06T00:00:00.206Z INFO  [cdfs_fuse] Found POSIX.1 extensions with usable inodes.
2023-09-06T00:00:00.206Z INFO  [fuser::session] Mounting mountpoint/

Or run cdfs directly from the repository like so:

$ cargo run -- images/rockridge.iso mountpoint/
    Finished dev [unoptimized + debuginfo] target(s) in 0.15s
     Running `target/debug/cdfs_fuse`
2023-09-06T00:00:00.203Z INFO  [cdfs_fuse] NOTE: The filesystem must be manually unmounted after exit
2023-09-06T00:00:00.206Z INFO  [cdfs_fuse] Found POSIX.1 extensions with usable inodes.
2023-09-06T00:00:00.206Z INFO  [fuser::session] Mounting mountpoint/

Supported ISO 9660 Extensions

System Use Sharing Protocol
CE – continuation area yes
PD – padding field no
SP – SUSP start not enforced
ST – SUSP end ignored
ER – extensions reference yes
ES – extensions selector no
Rock Ridge Interchange
PX – POSIX attributes yes
PN – POSIX inodes yes
SL – symbolic links yes
NM – long file names yes
CL – child links yes
PL – parent links N/A
RE – relocated directories yes
TF – file timestamps yes
SF – sparse files no

References

Licensing

This project is available under the Apache 2.0 or MIT license at your choosing.

Dependencies

~7–18MB
~273K SLoC