summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRyan Geary <rtgnj42@gmail.com>2020-03-17 13:41:44 -0400
committerRyan Geary <rtgnj42@gmail.com>2020-03-17 13:43:49 -0400
commit41e060680ea153fa8f245efc53f870bbb80faf89 (patch)
tree57504935f69df1cd8ed21a4ef758bb1fece34933
parentdfe4c2cad0e35996136f320b675265ce223bb326 (diff)
Handle failure to open input file
-rw-r--r--src/main.rs10
-rwxr-xr-xtest/e2e_test.sh11
2 files changed, 20 insertions, 1 deletions
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<dyn Read>,
+ Some(f) => match File::open(f) {
+ Ok(fh) => Box::new(fh) as Box<dyn Read>,
+ 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<dyn Read>,
};
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"