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::*;