rust-fatfs fork with rs-core_io as dependency instead. No support for chrono.
Go to file
Henry Gabryjelski 2a4c01082a Preserve 4 MSB in FAT32 entries and add more sanity checks (#13)
* Update compatibility maximum cluster size when sector size is larger than 512 bytes.

* Additional validation of values in FsInfo sector.
* next_free_cluster cannot be 0 or 1, as these are reserved clusters
* next_free_cluster must be a valid cluster (using BPB to validate)
* free_cluster_count must be possible value (using BPB to validate)

* Avoid data-loss edge-case on volumes over 138GB in size.

Specifically, if the volume has more
than 0x0FFF_FFF4 clusters, then the FAT
will include an entry for clusters that
are reserved values.  Specifically, cluster
number 0x0FFF_FFF7 is defined to mean
BAD_SECTOR, while numbers 0x0FFF_FFF8 ..
0x0FFF_FFFF are defined to mean end-of-chain.

This prevents these clusters from being part
of any valid cluster chain.  Therefore:
1. prevent setting these clusters to point to
   a valid next cluster
2. prevent reading these clusters as pointing
   to a valid next cluster

Instead, always read/write these FAT entries
to have next cluster value of BAD_SECTOR.

* Reduce noisy warnings on FAT32.

* The reserved bits in FAT entry must be preserved on update.

* Change the set() implementation for FAT32 entries to return an actual Err(),
when attempting to set values for cluster numbers that have special meaning.
2018-10-06 16:42:31 +02:00
examples Add more sanity checks and fix size formatting in ls example (#11) 2018-09-24 20:58:02 +02:00
resources Add LFN support and rename some functions. 2017-09-24 22:12:38 +02:00
scripts Make create-test-img.sh more portable. 2017-10-21 17:38:20 +02:00
src Preserve 4 MSB in FAT32 entries and add more sanity checks (#13) 2018-10-06 16:42:31 +02:00
tests Support reading volume label from root directory 2018-08-05 00:14:49 +02:00
.editorconfig Add .editorconfig file and fix whitespaces in existing files. (#4) 2017-10-25 17:20:27 +02:00
.gitignore Add Cargo.lock to .gitignore 2018-05-10 16:34:21 +02:00
.travis.yml Update Travis config and set 1.24 as minimal supported rustc version 2018-06-04 22:35:15 +02:00
build-nostd.sh Fix std build 2018-05-10 15:14:09 +02:00
Cargo.toml Change version to 0.3.0 2018-06-20 17:56:03 +02:00
LICENSE.txt Rename repository to rust-fatfs. 2017-11-08 23:00:30 +01:00
README.md Improve docs 2018-06-20 19:08:50 +02:00
rustfmt.toml Improve code style using rustfmt 2018-06-28 18:13:07 +02:00
TODO.md Support reading volume label from root directory 2018-08-05 00:14:49 +02:00

Rust FAT FS

Travis Build Status MIT licensed crates.io Documentation Minimum rustc version

A FAT filesystem library implemented in Rust.

Features:

  • read/write file using standard Read/Write traits,
  • read directory contents,
  • create/remove file or directory,
  • rename/move file or directory,
  • read/write file timestamps (updated automatically if chrono feature is enabled),
  • FAT12, FAT16, FAT32 compatibility,
  • LFN (Long File Names) extension is supported,
  • Basic no_std environment support.

Usage

Add this to your Cargo.toml:

[dependencies]
fatfs = "0.3"

and this to your crate root:

extern crate fatfs;

You can start using the fatfs library now:

let img_file = File::open("fat.img")?;
let fs = fatfs::FileSystem::new(img_file, fatfs::FsOptions::new())?;
let root_dir = fs.root_dir();
let mut file = root_dir.create_file("hello.txt")?;
file.write_all(b"Hello World!")?;

Note: it is recommended to wrap the underlying file struct in a buffering/caching object like BufStream from fscommon crate. For example:

extern crate fscommon;
let buf_stream = BufStream::new(img_file);
let fs = fatfs::FileSystem::new(img_file, fatfs::FsOptions::new())?;

See more examples in the examples subdirectory.

no_std usage

Add this to your Cargo.toml:

[dependencies]
fatfs = { version = "0.3", features = ["core_io"], default-features = false }

Note: LFN support requires alloc and core_io/collections features and makes use of alloc crate. You may have to provide a memory allocator implementation.

For building in no_std mode a nightly Rust compiler version compatible with the current core_io crate is required. See a date string in the core_io dependency version.

License

The MIT license. See LICENSE.txt.