From f42e2a95b388ec65d7520ca319f960c2d2da7ac1 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Fri, 16 Nov 2018 00:01:23 +0800 Subject: [PATCH 1/4] fix mksfs --- src/bin/mksfs.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/bin/mksfs.rs b/src/bin/mksfs.rs index de694d7..cfee1a8 100644 --- a/src/bin/mksfs.rs +++ b/src/bin/mksfs.rs @@ -5,6 +5,7 @@ use std::fs; use std::io::{Read, Write, Result}; use std::path::Path; use std::mem::uninitialized; +use std::sync::Arc; use simple_filesystem::*; fn main() -> Result<()> { @@ -31,7 +32,7 @@ fn zip(path: &Path, img_path: &Path) -> Result<()> { Ok(()) } -fn zip_dir(path: &Path, inode: INodePtr) -> Result<()> { +fn zip_dir(path: &Path, inode: Arc) -> Result<()> { let dir = fs::read_dir(path).expect("Failed to open dir"); for entry in dir { let entry = entry?; @@ -39,19 +40,19 @@ fn zip_dir(path: &Path, inode: INodePtr) -> Result<()> { let name = name_.to_str().unwrap(); let type_ = entry.file_type()?; if type_.is_file() { - let inode = inode.borrow_mut().create(name, FileType::File).expect("Failed to create INode"); + let inode = inode.create(name, FileType::File).expect("Failed to create INode"); let mut file = fs::File::open(entry.path())?; - inode.borrow_mut().resize(file.metadata().unwrap().len() as usize).expect("Failed to resize INode"); + inode.resize(file.metadata().unwrap().len() as usize).expect("Failed to resize INode"); let mut buf: [u8; 4096] = unsafe { uninitialized() }; let mut offset = 0usize; let mut len = 4096; while len == 4096 { len = file.read(&mut buf)?; - inode.borrow().write_at(offset, &buf).expect("Failed to write image"); + inode.write_at(offset, &buf).expect("Failed to write image"); offset += len; } } else if type_.is_dir() { - let inode = inode.borrow_mut().create(name, FileType::Dir).expect("Failed to create INode"); + let inode = inode.create(name, FileType::Dir).expect("Failed to create INode"); zip_dir(entry.path().as_path(), inode)?; } } @@ -66,13 +67,13 @@ fn unzip(path: &Path, img_path: &Path) -> Result<()> { unzip_dir(path, inode) } -fn unzip_dir(path: &Path, inode: INodePtr) -> Result<()> { - let files = inode.borrow().list().expect("Failed to list files from INode"); +fn unzip_dir(path: &Path, inode: Arc) -> Result<()> { + let files = inode.list().expect("Failed to list files from INode"); for name in files.iter().skip(2) { - let inode = inode.borrow().lookup(name.as_str()).expect("Failed to lookup"); + let inode = inode.lookup(name.as_str()).expect("Failed to lookup"); let mut path = path.to_path_buf(); path.push(name); - let info = inode.borrow().info().expect("Failed to get file info"); + let info = inode.info().expect("Failed to get file info"); match info.type_ { FileType::File => { let mut file = fs::File::create(&path)?; @@ -80,7 +81,7 @@ fn unzip_dir(path: &Path, inode: INodePtr) -> Result<()> { let mut offset = 0usize; let mut len = 4096; while len == 4096 { - len = inode.borrow().read_at(offset, buf.as_mut()).expect("Failed to read from INode"); + len = inode.read_at(offset, buf.as_mut()).expect("Failed to read from INode"); file.write(&buf[..len])?; offset += len; } From 24a51faff266744d83c1ef60328b28906d2b525c Mon Sep 17 00:00:00 2001 From: WangRunji Date: Fri, 16 Nov 2018 00:03:56 +0800 Subject: [PATCH 2/4] remove Debug dependency for INode --- src/tests.rs | 13 ------------- src/vfs.rs | 2 +- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/src/tests.rs b/src/tests.rs index 682fa3a..1cbbe5a 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -35,19 +35,6 @@ fn create_new_sfs() { let _root = sfs.root_inode(); } -// #[test] -fn print_root() { - let sfs = _open_sample_file(); - let root = sfs.root_inode(); - println!("{:?}", root); - - let files = root.list().unwrap(); - println!("{:?}", files); - assert_eq!(files[3], root.get_entry(3).unwrap()); - - sfs.sync().unwrap(); -} - #[test] fn create_file() -> Result<()> { let sfs = _create_new_sfs(); diff --git a/src/vfs.rs b/src/vfs.rs index d7965a5..f88c657 100644 --- a/src/vfs.rs +++ b/src/vfs.rs @@ -10,7 +10,7 @@ pub trait Device: Send { } /// Abstract operations on a inode. -pub trait INode: Debug + Any + Sync + Send { +pub trait INode: Any + Sync + Send { fn read_at(&self, offset: usize, buf: &mut [u8]) -> Result; fn write_at(&self, offset: usize, buf: &[u8]) -> Result; fn info(&self) -> Result; From 919545b2aea0387b9834584cb33dc7da81b48808 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Mon, 19 Nov 2018 15:58:21 +0800 Subject: [PATCH 3/4] update to 2018 edition --- Cargo.toml | 3 ++- src/bin/mksfs.rs | 2 -- src/blocked_device.rs | 4 ++-- src/file.rs | 2 +- src/lib.rs | 17 +++++------------ src/sfs.rs | 10 +++++----- src/structs.rs | 1 + src/tests.rs | 8 ++++---- 8 files changed, 20 insertions(+), 27 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 55440d9..0c5472a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,7 @@ name = "simple-filesystem" version = "0.0.1" authors = ["WangRunji "] +edition = "2018" [[bin]] name = "mksfs" @@ -10,7 +11,7 @@ required-features = ["std"] [dependencies] bit-vec = { default-features = false, git = "https://github.com/AltSysrq/bit-vec.git" } # default-features contains 'std' -static_assertions = "0.2.5" +static_assertions = "0.3" spin = "0.4" [features] diff --git a/src/bin/mksfs.rs b/src/bin/mksfs.rs index cfee1a8..63ccf46 100644 --- a/src/bin/mksfs.rs +++ b/src/bin/mksfs.rs @@ -1,5 +1,3 @@ -extern crate simple_filesystem; - use std::env; use std::fs; use std::io::{Read, Write, Result}; diff --git a/src/blocked_device.rs b/src/blocked_device.rs index 98e1bf2..5e1ff0a 100644 --- a/src/blocked_device.rs +++ b/src/blocked_device.rs @@ -1,5 +1,5 @@ -use util::*; -use vfs::Device; +use crate::util::*; +use crate::vfs::Device; /// Device which can only R/W in blocks pub trait BlockedDevice: Send { diff --git a/src/file.rs b/src/file.rs index 6c1886e..6cc6684 100644 --- a/src/file.rs +++ b/src/file.rs @@ -1,4 +1,4 @@ -use vfs::{INode, Result, FileInfo}; +use crate::vfs::{INode, Result, FileInfo}; use alloc::{sync::Arc, string::String}; pub struct File { diff --git a/src/lib.rs b/src/lib.rs index 94ae27b..f2f4a73 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,17 +1,10 @@ +#![cfg_attr(not(any(test, feature = "std")), no_std)] #![feature(alloc)] #![feature(const_fn)] #![feature(nll)] -#![cfg_attr(target_arch = "riscv", feature(match_default_bindings))] -#![no_std] +#![feature(extern_crate_item_prelude)] -#[cfg(any(test, feature = "std"))] -#[macro_use] -extern crate std; extern crate alloc; -extern crate bit_vec; -#[macro_use] -extern crate static_assertions; -extern crate spin; #[cfg(not(test))] macro_rules! eprintln { @@ -30,9 +23,9 @@ mod structs; #[cfg(test)] mod tests; -pub use sfs::*; -pub use vfs::*; -pub use blocked_device::BlockedDevice; +pub use crate::sfs::*; +pub use crate::vfs::*; +pub use crate::blocked_device::BlockedDevice; #[cfg(any(test, feature = "std"))] pub mod std_impl { diff --git a/src/sfs.rs b/src/sfs.rs index 41bdcf4..37c4214 100644 --- a/src/sfs.rs +++ b/src/sfs.rs @@ -4,11 +4,11 @@ use core::mem::uninitialized; use core::slice; use core::fmt::{Debug, Formatter, Error}; use core::any::Any; -use dirty::Dirty; -use structs::*; -use vfs::{self, Device, INode, FileSystem}; -use util::*; use spin::{Mutex, RwLock}; +use crate::dirty::Dirty; +use crate::structs::*; +use crate::vfs::{self, Device, INode, FileSystem}; +use crate::util::*; impl Device { fn read_block(&mut self, id: BlockId, offset: usize, buf: &mut [u8]) -> vfs::Result<()> { @@ -622,7 +622,7 @@ impl vfs::FileSystem for SimpleFileSystem { impl Drop for SimpleFileSystem { /// Auto sync when drop fn drop(&mut self) { - use vfs::FileSystem; + use crate::vfs::FileSystem; self.sync().expect("failed to sync"); } } diff --git a/src/structs.rs b/src/structs.rs index e5e14a0..ed4a7d7 100644 --- a/src/structs.rs +++ b/src/structs.rs @@ -4,6 +4,7 @@ use core::slice; use core::mem::{size_of_val, size_of}; use core::fmt::{Debug, Formatter, Error}; use alloc::str; +use static_assertions::const_assert; /// On-disk superblock #[repr(C)] diff --git a/src/tests.rs b/src/tests.rs index 1cbbe5a..98efd35 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -3,10 +3,10 @@ use std::io::{Read, Write, Seek, SeekFrom}; use std::boxed::Box; use std::sync::Arc; use std::mem::uninitialized; -use super::sfs::*; -use super::vfs::*; -use super::vfs::INode; -use super::structs::{DiskEntry, AsBuf}; +use crate::sfs::*; +use crate::vfs::*; +use crate::vfs::INode; +use crate::structs::{DiskEntry, AsBuf}; fn _open_sample_file() -> Arc { fs::copy("sfs.img", "test.img").expect("failed to open sfs.img"); From 249383f7e3f195e0a8ce858f40394e9d5f7f58e0 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Mon, 19 Nov 2018 15:59:38 +0800 Subject: [PATCH 4/4] add mksfs to Travis --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 52b1d96..dcf3226 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,4 +2,5 @@ language: rust rust: - nightly script: + - cargo build --bin mksfs --features "std" - cargo test --verbose -- --test-threads=1 \ No newline at end of file