fatfs/
lib.rs

1//! A FAT filesystem library implemented in Rust.
2//!
3//! # Usage
4//!
5//! This crate is [on crates.io](https://crates.io/crates/fatfs) and can be
6//! used by adding `fatfs` to the dependencies in your project's `Cargo.toml`.
7//!
8//! ```toml
9//! [dependencies]
10//! fatfs = "0.3"
11//! ```
12//!
13//! And this in your crate root:
14//!
15//! ```rust
16//! extern crate fatfs;
17//! ```
18//!
19//! # Examples
20//!
21//! ```rust
22//! // Declare external crates
23//! // Note: `fscommon` crate is used to speedup IO operations
24//! extern crate fatfs;
25//! extern crate fscommon;
26//!
27//! use std::io::prelude::*;
28//!
29//! fn main() -> std::io::Result<()> {
30//!     # std::fs::copy("resources/fat16.img", "tmp/fat.img")?;
31//!     // Initialize a filesystem object
32//!     let img_file = std::fs::OpenOptions::new().read(true).write(true)
33//!         .open("tmp/fat.img")?;
34//!     let buf_stream = fscommon::BufStream::new(img_file);
35//!     let fs = fatfs::FileSystem::new(buf_stream, fatfs::FsOptions::new())?;
36//!     let root_dir = fs.root_dir();
37//!
38//!     // Write a file
39//!     root_dir.create_dir("foo")?;
40//!     let mut file = root_dir.create_file("foo/hello.txt")?;
41//!     file.truncate()?;
42//!     file.write_all(b"Hello World!")?;
43//!
44//!     // Read a directory
45//!     let dir = root_dir.open_dir("foo")?;
46//!     for r in dir.iter() {
47//!         let entry = r?;
48//!         println!("{}", entry.file_name());
49//!     }
50//!     # std::fs::remove_file("tmp/fat.img")?;
51//!     # Ok(())
52//! }
53//! ```
54
55#![crate_type = "lib"]
56#![crate_name = "fatfs"]
57#![cfg_attr(not(feature = "std"), no_std)]
58#![cfg_attr(all(not(feature = "std"), feature = "alloc"), feature(alloc))]
59// Disable warnings to not clutter code with cfg too much
60#![cfg_attr(not(all(feature = "alloc", feature = "lfn")), allow(dead_code, unused_imports))]
61// `alloc` compiler feature is needed in Rust before 1.36
62#![cfg_attr(all(not(feature = "std"), feature = "alloc"), allow(stable_features))]
63
64#[macro_use]
65extern crate bitflags;
66
67#[macro_use]
68extern crate log;
69
70#[cfg(all(not(feature = "std"), feature = "alloc"))]
71extern crate alloc;
72
73mod boot_sector;
74mod dir;
75mod dir_entry;
76mod error;
77mod file;
78mod fs;
79mod table;
80mod time;
81mod transaction;
82
83#[cfg(not(feature = "std"))]
84mod byteorder_core_io;
85
86#[cfg(not(feature = "std"))]
87use crate::byteorder_core_io as byteorder_ext;
88#[cfg(feature = "std")]
89use byteorder as byteorder_ext;
90
91#[cfg(not(feature = "std"))]
92use core_io as io;
93#[cfg(feature = "std")]
94use std::io;
95
96#[cfg(not(feature = "std"))]
97use core;
98#[cfg(feature = "std")]
99use std as core;
100
101pub use crate::dir::*;
102pub use crate::dir_entry::*;
103pub use crate::error::*;
104pub use crate::file::*;
105pub use crate::fs::*;
106pub use crate::time::*;