From 41e060680ea153fa8f245efc53f870bbb80faf89 Mon Sep 17 00:00:00 2001 From: Ryan Geary Date: Tue, 17 Mar 2020 13:41:44 -0400 Subject: [PATCH] Handle failure to open input file --- src/main.rs | 10 +++++++++- test/e2e_test.sh | 11 +++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) 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"