X-Git-Url: https://code.octet-stream.net/hashgood/blobdiff_plain/1dec1ec82f55d639d9fad0d0933545aa509c4272..2692cd1acb891e7a89041e1095de6df438c0326e:/src/calculate.rs?ds=sidebyside diff --git a/src/calculate.rs b/src/calculate.rs index 870115c..dc059b2 100644 --- a/src/calculate.rs +++ b/src/calculate.rs @@ -16,12 +16,27 @@ use std::thread::JoinHandle; pub type CalculateResult = Result)>, Box>; /// For a given path to the input (may be "-" for STDIN), try to obtain a reader for the data within it. -pub fn get_input_reader(input: &PathBuf) -> Result, Box> { +pub fn get_input_reader(input: &PathBuf) -> Result, String> { if input.to_str() == Some("-") { // Special case: standard input return Ok(Box::new(std::io::stdin())); } - Ok(Box::new(File::open(input)?)) + if !input.exists() { + return Err(format!( + "The path '{}' does not exist.", + input.to_string_lossy() + )); + } + if !input.is_file() { + return Err(format!( + "The path '{}' is not a regular file.", + input.to_string_lossy() + )); + } + match File::open(input) { + Ok(f) => Ok(Box::new(f)), + Err(e) => Err(format!("File open: {}", e)), + } } /// For the given input stream, calculate all requested digest types