summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2018-10-02 09:31:22 +0300
committerLars Wirzenius <liw@liw.fi>2018-10-02 09:31:22 +0300
commit7d818831a3712e307731bf5be28bc876874f8b39 (patch)
treed915b9686b701bd45108be64da259f4348dc6e66 /src
parent8e186e739f133297cb2dd4761dbfae5566f7b75e (diff)
downloadsummainrs-7d818831a3712e307731bf5be28bc876874f8b39.tar.gz
Change: really use walkdir crate
Diffstat (limited to 'src')
-rw-r--r--src/main.rs76
1 files changed, 45 insertions, 31 deletions
diff --git a/src/main.rs b/src/main.rs
index cac0646..79736c4 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -5,6 +5,9 @@ use std::os::unix::fs::PermissionsExt;
use std::os::linux::fs::MetadataExt;
use std::io::prelude::*;
+extern crate walkdir;
+use walkdir::{WalkDir, DirEntry};
+
extern crate users;
extern crate chrono;
@@ -16,83 +19,93 @@ use crypto_hash::{Algorithm, Hasher};
extern crate hex;
-mod fswalk;
-use fswalk::DirTree;
-
// Command line args are names of dirs, recursively list all files and
// dirs them
fn main() -> io::Result<()> {
for dirname in env::args().skip(1) {
- let tree = DirTree::new(&dirname);
- for entry in tree {
- write_info(&entry.path(), &entry.metadata());
+ for e in WalkDir::new(&dirname).into_iter().filter_map(|e| e.ok()) {
+ write_info(&e);
}
}
Ok(())
}
-fn write_info(path: &str, meta: &fs::Metadata) {
- println!("Name: {}", path);
- println!("Mtime: {}", format_mtime(meta));
- println!("Mode: {}", format_mode(meta));
- println!("Ino: {}", format_inode(meta));
- println!("Dev: {}", format_dev(meta));
- println!("Nlink: {}", format_nlink(meta));
- println!("Size: {}", format_size(meta));
- println!("Uid: {}", format_uid(meta));
- println!("Username: {}", format_username(meta));
- println!("Gid: {}", format_gid(meta));
- println!("Group: {}", format_group(meta));
- println!("SHA256: {}", format_sha256(path));
+fn write_info(e: &DirEntry) {
+ println!("Name: {}", format_name(e));
+ println!("Mtime: {}", format_mtime(e));
+ println!("Mode: {}", format_mode(e));
+ println!("Ino: {}", format_inode(e));
+ println!("Dev: {}", format_dev(e));
+ println!("Nlink: {}", format_nlink(e));
+ println!("Size: {}", format_size(e));
+ println!("Uid: {}", format_uid(e));
+ println!("Username: {}", format_username(e));
+ println!("Gid: {}", format_gid(e));
+ println!("Group: {}", format_group(e));
+ println!("SHA256: {}", format_sha256(e));
println!("");
}
-fn format_mtime(meta: &fs::Metadata) -> String {
+fn format_name(e: &DirEntry) -> String {
+ e.path().to_string_lossy().to_string()
+}
+
+
+fn format_mtime(e: &DirEntry) -> String {
+ let meta = e.metadata().unwrap();
let mtime = meta.modified().unwrap();
let datetime = DateTime::<Utc>::from(mtime);
datetime.format("%Y-%m-%d %H:%M:%S.%f %z").to_string()
}
-fn format_mode(meta: &fs::Metadata) -> String {
+fn format_mode(e: &DirEntry) -> String {
+ let meta = e.metadata().unwrap();
let mode = meta.permissions().mode();
format!("{:06o}", mode)
}
-fn format_inode(meta: &fs::Metadata) -> String {
+fn format_inode(e: &DirEntry) -> String {
+ let meta = e.metadata().unwrap();
format!("{}", meta.st_ino())
}
-fn format_dev(meta: &fs::Metadata) -> String {
+fn format_dev(e: &DirEntry) -> String {
+ let meta = e.metadata().unwrap();
format!("{}", meta.st_dev())
}
-fn format_nlink(meta: &fs::Metadata) -> String {
+fn format_nlink(e: &DirEntry) -> String {
+ let meta = e.metadata().unwrap();
format!("{}", meta.st_nlink())
}
-fn format_size(meta: &fs::Metadata) -> String {
+fn format_size(e: &DirEntry) -> String {
+ let meta = e.metadata().unwrap();
format!("{}", meta.len())
}
-fn format_uid(meta: &fs::Metadata) -> String {
+fn format_uid(e: &DirEntry) -> String {
+ let meta = e.metadata().unwrap();
format!("{}", meta.st_uid())
}
-fn format_gid(meta: &fs::Metadata) -> String {
+fn format_gid(e: &DirEntry) -> String {
+ let meta = e.metadata().unwrap();
format!("{}", meta.st_gid())
}
-fn format_username(meta: &fs::Metadata) -> String {
+fn format_username(e: &DirEntry) -> String {
+ let meta = e.metadata().unwrap();
if let Some(u) = users::get_user_by_uid(meta.st_uid()) {
format!("{}", u.name())
} else {
@@ -101,7 +114,8 @@ fn format_username(meta: &fs::Metadata) -> String {
}
-fn format_group(meta: &fs::Metadata) -> String {
+fn format_group(e: &DirEntry) -> String {
+ let meta = e.metadata().unwrap();
if let Some(g) = users::get_group_by_gid(meta.st_gid()) {
format!("{}", g.name())
} else {
@@ -110,10 +124,10 @@ fn format_group(meta: &fs::Metadata) -> String {
}
-fn format_sha256(filename: &str) -> String {
+fn format_sha256(e: &DirEntry) -> String {
let mut ok = true;
let mut hasher = Hasher::new(Algorithm::SHA256);
- if let Ok(file) = fs::File::open(filename) {
+ if let Ok(file) = fs::File::open(e.path()) {
let mut reader = io::BufReader::new(file);
let mut buf = [0; 1024 * 1024];
let mut done = false;