diff --git a/Cargo.lock b/Cargo.lock index b3fdc64..29911e7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,10 +2,16 @@ name = "rustfat" version = "0.1.0" dependencies = [ + "bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", "byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "bitflags" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "byteorder" version = "1.1.0" @@ -93,6 +99,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" [metadata] +"checksum bitflags 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f5cde24d1b2e2216a726368b2363a273739c91f4e3eb4e0dd12d672d396ad989" "checksum byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff81738b726f5d099632ceaffe7fb65b90212e8dce59d518729e7e8634032d3d" "checksum chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7c20ebe0b2b08b0aeddba49c609fe7957ba2e33449882cb186a180bc60682fa9" "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" diff --git a/Cargo.toml b/Cargo.toml index cd5763a..6e308f3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,4 +5,5 @@ authors = ["Rafał Harabień "] [dependencies] byteorder = "1" +bitflags = "1.0" chrono = "0.4" diff --git a/src/dir.rs b/src/dir.rs index bbaa13f..8dc91c5 100644 --- a/src/dir.rs +++ b/src/dir.rs @@ -8,22 +8,23 @@ use chrono::{DateTime, Date, TimeZone, Local}; use fs::FatFileSystem; use file::FatFile; -#[derive(Debug, PartialEq)] -#[allow(dead_code)] -enum FatFileAttribute { - READ_ONLY = 0x01, - HIDDEN = 0x02, - SYSTEM = 0x04, - VOLUME_ID = 0x08, - DIRECTORY = 0x10, - ARCHIVE = 0x20, - LFN = 0x0F, +bitflags! { + pub struct FatFileAttributes: u8 { + const READ_ONLY = 0x01; + const HIDDEN = 0x02; + const SYSTEM = 0x04; + const VOLUME_ID = 0x08; + const DIRECTORY = 0x10; + const ARCHIVE = 0x20; + const LFN = Self::READ_ONLY.bits | Self::HIDDEN.bits + | Self::SYSTEM.bits | Self::VOLUME_ID.bits; + } } #[allow(dead_code)] pub struct FatDirEntry { name: [u8; 11], - attrs: u8, + attrs: FatFileAttributes, reserved_0: u8, create_time_0: u8, create_time_1: u16, @@ -49,7 +50,11 @@ fn convert_date_time(dos_date: u16, dos_time: u16) -> DateTime { impl FatDirEntry { pub fn get_name(&self) -> String { - return str::from_utf8(&self.name).unwrap().trim_right().to_string(); + str::from_utf8(&self.name).unwrap().trim_right().to_string() + } + + pub fn get_attrs(&self) -> FatFileAttributes { + self.attrs } pub fn get_cluster(&self) -> u32 { @@ -103,7 +108,7 @@ fn read_dir_entry(rdr: &mut Read) -> io::Result { rdr.read(&mut name)?; Ok(FatDirEntry { name: name, - attrs: rdr.read_u8()?, + attrs: FatFileAttributes::from_bits(rdr.read_u8()?).unwrap(), reserved_0: rdr.read_u8()?, create_time_0: rdr.read_u8()?, create_time_1: rdr.read_u16::()?, diff --git a/src/lib.rs b/src/lib.rs index 691f6a6..c4a0b21 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,6 +4,9 @@ extern crate byteorder; extern crate chrono; +#[macro_use] +extern crate bitflags; + pub mod fs; pub mod dir; pub mod file;