Changelog ========= # ape-fatfs ## 0.2.0 * **Added `exists` function to directories** *(commit b8ee3a8)* * **Made minor filesystem optimizations** *(commit 809b066)* ## 0.1.0 * **Ported to Rust 2022** *(commit 6942ef6)* * **Ported to use embedded_io** *(commit da40ab0)* # rust-fatfs versions <= 0.4.0 ### (retained for archival purposes) 0.4.0 (not released yet) ------------------------ New features: * Add `fatfs::Read`, `fatfs::Write` and `fatfs::Seek` traits and use them to replace usages of `Read`, `Write`, `Seek` traits from `std::io` (BREAKING CHANGE). New traits are subtraits of `fatfs::IoBase` and use `IoBase::Error` associated type for errors. * Add `Error` enum and use it to replace all usages of `std::io::Error` struct (BREAKING CHANGE). The new enum items allow better differentiation of errors than `std::io::ErrorKind`. * Implement `From>` trait for `std::io::Error` to simplify errors conversion. * Implement `Read`, `Write`, `Seek` traits from `std::io` for `fatfs::File` struct. * Add `StdIoWrapper` struct that implements newly added `Read`, `Write`, `Seek` traits and wraps types that implement corresponding traits from `std::io` module. * Add `IntoStorage` trait and implement it for types that implement `Read`, `Write`, `Seek` traits from `std::io` and types that implement newly added `Read`, `Write`, `Seek` traits from this crate. Make `FileSystem::new` accept types that implement `IntoStorage`. * Remove `core_io` dependency. There are no Rust compiler restrictions for `no_std` builds anymore. * Add type parameters for `TimeProvider` and `OemCpConverter` in `FileSystem`, `File`, `Dir`, `DirEntry`, `FsOptions` public structs and require an owned time provider and oem CP converter instead of a reference with a static lifetime in `FsOptions` (BREAKING CHANGE). This change allows `FileSystem` usage in multi-threaded environment (e.g. wrapped in a `Mutex`). * Add non-public field to `Date`, `Time`, `DateTime` structures to disallow direct instantiation (BREAKING CHANGE). * Add `Date::new`, `Time::new`, `DateTime::new` functions that instiantiate corresponding structures after ensuring that arguments are in the supported range. They panic if this is not the case. * Fix time encoding during a leap second if using `chrono`. * Create directory entry with `VOLUME_ID` attribute when formatting if volume label was set in `FormatVolumeOptions`. * Fix creating directory entries when `lfn` feature is enabled and `alloc` feature is disabled * Fix `format_volume` function panicking in debug build for FAT12 volumes with size below 1 MB * Fix index out of range panic when reading 248+ characters long file names with `alloc` feature disabled * Remove `byteorder` dependency. * Bump up minimal Rust compiler version to 1.48.0. * Build the crate using the 2018 edition. * Add support for compile-time configuration of logging levels via Cargo features. By default, all logging levels are enabled, including "trace" and up. * Disable chrono default features except `clock` 0.3.4 (2020-07-20) ------------------ Bug fixes: * Fix time encoding and decoding in a directory entry. 0.3.3 (2019-11-10) ------------------ Bug fixes: * Add missing characters to the whitelist for long file name (`^`, `#`, `&`) * Fix invalid short file names for `.` and `..` entries when creating a new directory * Fix `no_std` build Misc changes: * Fix compiler warnings * Improve documentation 0.3.2 (2018-12-29) ------------------ New features: * Add `format_volume` function for initializing a FAT filesystem on a partition * Add more checks of filesystem correctness when mounting Bug fixes: * Clear directory returned from `create_dir` method - upgrade ASAP if this method is used * Fix handling of FSInfo sector on FAT32 volumes with sector size different than 512 - upgrade ASAP if such sector size is used * Use `write_all` in `serialize` method for FSInfo sector - previously it could have been improperly updated 0.3.1 (2018-10-20) ------------------ New features: * Increased file creation time resolution from 2s to 1/100s * Added oem_cp_converter filesystem option allowing to provide custom short name decoder * Added time_provider filesystem option allowing to provide time used when modifying directory entries * Added marking volume as dirty on first write and not-dirty on unmount * Added support for reading volume label from root directory Bug fixes: * Fixed handling of short names with spaces in the middle - all characters after first space in 8.3 components were stripped before * Fixed decoding 0xE5 character in first byte of short name - if first character of short name is equal to 0xE5, it was read as 0x05 * Preserve 4 most significant bits in FAT32 entries - it is required by FAT specification, but previous behavior should not cause any compatibility problem because all known implementations ignore those bits * Fixed warnings for file entries without LFN entries - they were handled properly, but caused warnings in run-time Misc changes: * Deprecated set_created. set_accessed, set_modified methods on File - those fields are updated automatically using information provided by TimeProvider * Fixed size formatting in ls.rs example * Added more filesystem checks causing errors or warnings when incompatibility is detected * Removed unnecessary clone() calls * Code formatting and docs fixes