Use typed attributes.

This commit is contained in:
Rafał Harabień 2017-09-22 23:36:44 +02:00
parent 65936f8f27
commit dd23854cd5
4 changed files with 29 additions and 13 deletions

7
Cargo.lock generated
View File

@ -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"

View File

@ -5,4 +5,5 @@ authors = ["Rafał Harabień <rafalh1992@o2.pl>"]
[dependencies]
byteorder = "1"
bitflags = "1.0"
chrono = "0.4"

View File

@ -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<Local> {
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<FatDirEntry> {
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::<LittleEndian>()?,

View File

@ -4,6 +4,9 @@
extern crate byteorder;
extern crate chrono;
#[macro_use]
extern crate bitflags;
pub mod fs;
pub mod dir;
pub mod file;