From 1e69ae5e986daf9f12243b72980f3299217bf108 Mon Sep 17 00:00:00 2001 From: emma Date: Tue, 11 Apr 2023 18:26:02 -0400 Subject: [PATCH] better argument parsing --- src/main.rs | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/src/main.rs b/src/main.rs index 65ce734..a97ac07 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,13 +19,14 @@ use std::{ env::args, + fs::File, io::{ Read, - stdin, stdout, Stdout, Write, }, + os::fd::FromRawFd, }; use crossterm::{ @@ -353,24 +354,34 @@ fn screen_main(stdout: &mut Stdout, mut state: State) -> Result<()> { fn main() -> Result<()> { let argv = args().collect::>(); + let mut buf = Vec::new(); let text: String; - if !argv.get(1).is_some() { - text = "".to_string(); - } else { - let mut buf = Vec::new(); - std::fs::File::open(argv[1].clone()).unwrap_or_else(|_| { - eprintln!("{}: {}: No such file.", argv[0], argv[1]); - exit(EX_UNAVAILABLE); - }).read_to_end(&mut buf).unwrap(); + text = match argv.get(1) { + Some(path) => { + match path.as_str() { + "-" => unsafe { File::from_raw_fd(0) }, + _ => { + std::fs::File::open(path).unwrap_or_else(|_| { + eprintln!( + "{}: {}: No such file or directory.", + argv[0], + argv[1] + ); + exit(EX_UNAVAILABLE); + }) + }, + }.read_to_end(&mut buf).unwrap(); - text = String::from_utf8(buf).unwrap_or_else(|_| { - eprintln!( - "{}: {}: File contents are invalid UTF-8.", argv[0], argv[1] - ); - exit(EX_DATAERR); - }); - } + String::from_utf8(buf).unwrap_or_else(|_| { + eprintln!( + "{}: {}: File contents are invalid UTF-8.", argv[0], argv[1] + ); + exit(EX_DATAERR); + }) + }, + None => "".to_string(), + }; let state = State::from_str(&text)?; let mut stdout = stdout();