11 use std::{env, path::PathBuf};
14 use error::{Error, Result};
15 use once_cell::sync::Lazy;
16 use utils::{QuestionAction, QuestionPolicy};
18 use crate::utils::logger::spawn_logger_thread;
20 // Used in BufReader and BufWriter to perform less syscalls
21 const BUFFER_CAPACITY: usize = 1024 * 32;
23 /// Current directory or empty directory
24 static CURRENT_DIRECTORY: Lazy<PathBuf> = Lazy::new(|| env::current_dir().unwrap_or_default());
26 /// The status code returned from `ouch` on error
27 pub const EXIT_FAILURE: i32 = libc::EXIT_FAILURE;
30 let handler = spawn_logger_thread();
32 handler.shutdown_and_wait();
34 if let Err(err) = result {
36 std::process::exit(EXIT_FAILURE);
40 fn run() -> Result<()> {
41 let (args, skip_questions_positively, file_visibility_policy) = CliArgs::parse_and_validate_args()?;
42 commands::run(args, skip_questions_positively, file_visibility_policy)