diff --git a/src/main.rs b/src/main.rs index dbefafa..9bea756 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,6 @@ use std::fs::File; use std::io::{self, Read, Write}; +use std::process; use structopt::StructOpt; #[macro_use] @@ -17,7 +18,14 @@ fn main() { let config = Config::new(opt); let read = match &config.opt.input { - Some(f) => Box::new(File::open(f).expect("Could not open file")) as Box, + Some(f) => match File::open(f) { + Ok(fh) => Box::new(fh) as Box, + Err(e) => { + eprintln!("Failed to open file: {}", e); + // exit code of 3 means failure to open input file + process::exit(3); + } + }, None => Box::new(io::stdin()) as Box, }; diff --git a/test/e2e_test.sh b/test/e2e_test.sh index e98fa49..1f2556a 100755 --- a/test/e2e_test.sh +++ b/test/e2e_test.sh @@ -33,6 +33,17 @@ if [ $r -ne 2 ]; then exit 1 fi +file=/tmp/000_file +touch $file +chmod 000 $file +cargo run -- 3 -i $file >&/dev/null +r=$? +if [ $r -ne 3 ]; then + echo "Failed to return 3 on file open error" + exit 1 +fi +rm -f $file + cd $orig_dir printf "\033[1;32mAll tests passed\033[0m\n"