From 1817f9b4ea5156290da4f6e29bdace8efb670fe1 Mon Sep 17 00:00:00 2001 From: emma Date: Mon, 5 Dec 2022 19:04:28 -0500 Subject: [PATCH] proper error handling --- src/bin/cat.rs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/bin/cat.rs b/src/bin/cat.rs index afe7f8f..4929bfd 100644 --- a/src/bin/cat.rs +++ b/src/bin/cat.rs @@ -2,12 +2,13 @@ // SPDX-License-Identifier: AGPL-3.0-or-later use std::fs::read_to_string; -use std::io::{stdout, Write}; +use std::io::{stdin, stdout, Write}; use std::env; use std::process; fn main() { - let args: Vec = env::args().skip(1).collect(); + let mut args: Vec = env::args().collect(); + let argv0 = args.remove(0); let mut opts = Vec::new(); for arg in &args { @@ -23,13 +24,22 @@ fn main() { // delay as each is read. "-u" => {}, - _ => process::exit(1), + _ => { + println! ("Usage: {} [options...] [files...]", argv0); + process::exit(64); // sysexits(3) EX_USAGE + }, }; } } else { for path in args { - print!("{}", read_to_string(path).unwrap()); + match read_to_string(&path) { + Ok(val) => println!("{}", val), + Err(_) => { + println!("{}: {}: No such file or directory.", argv0, path); + process::exit(66); // sysexits(3) EX_NOINPUT + }, + }; } }