From de04fbe1bc16f27916a7d0754f4b635c55b08480 Mon Sep 17 00:00:00 2001 From: Jon Moroney Date: Sat, 5 May 2018 10:01:57 -1000 Subject: [PATCH] Fix for thread panics --- Cargo.toml | 2 +- src/main.rs | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index fe112eb..4e39003 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ddh" -version = "0.9.4" +version = "0.9.5" authors = ["Jon Moroney "] [dependencies] diff --git a/src/main.rs b/src/main.rs index 34cf5d4..4a88e98 100644 --- a/src/main.rs +++ b/src/main.rs @@ -56,7 +56,7 @@ impl Hash for Fileinfo{ fn main() { let arguments = App::new("Directory Difference hTool") - .version("0.9.4") + .version("0.9.5") .author("Jon Moroney jmoroney@hawaii.edu") .about("Compare and contrast directories.\nExample invocation: ddh /home/jon/downloads /home/jon/documents -p shared") .arg(Arg::with_name("directories") @@ -173,10 +173,16 @@ fn traverse_and_spawn(current_path: &Path, sender: Sender) -> (){ } let current_path = current_path.canonicalize().expect("Error canonicalizing path"); if current_path.is_dir(){ - let paths: Vec<_> = fs::read_dir(current_path).unwrap().collect(); + + let mut paths: Vec = Vec::new(); + //for result in fs::read_dir(current_path).collect(){ + match fs::read_dir(current_path) { + Ok(read_dir_results) => read_dir_results.filter(|x| x.is_ok()).for_each(|x| paths.push(x.unwrap())), + Err(e) => println!("Skipping. {:?}", e.kind()), + } //println!("paths = {:?}", paths); paths.into_par_iter().for_each_with(sender, |s, dir_entry| { - traverse_and_spawn(dir_entry.expect("Error unwrapping dir_entry").path().as_path(), s.clone()); + traverse_and_spawn(dir_entry.path().as_path(), s.clone()); }); } else if current_path.is_file() { sender.send(Fileinfo::new(0, current_path.metadata().expect("Error with current path length").len(), current_path.to_path_buf())).expect("Error with current path path_buf");