From 58087df02a30bb4c7d6e474dfeee20b9faa51b93 Mon Sep 17 00:00:00 2001 From: clara swanson <69856940+cswn@users.noreply.github.com> Date: Mon, 20 Nov 2023 10:16:18 +0100 Subject: [PATCH] stdbuf: remove crash macro (#5549) * stdbuf: remove crash! macro * stdbuf: change target_vendor back to apple * tests/stdbuf: change stderr_only to usage_error in test_stdbuf_invalid_mode_fails * stdbuf: add exit code to check_option * stdbuf: remove set_exit_code line from error --- src/uu/stdbuf/src/stdbuf.rs | 29 +++++++++++++++-------------- tests/by-util/test_stdbuf.rs | 2 +- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/uu/stdbuf/src/stdbuf.rs b/src/uu/stdbuf/src/stdbuf.rs index 857828275..38c4451ca 100644 --- a/src/uu/stdbuf/src/stdbuf.rs +++ b/src/uu/stdbuf/src/stdbuf.rs @@ -7,7 +7,7 @@ use clap::{crate_version, Arg, ArgAction, ArgMatches, Command}; use std::fs::File; -use std::io::{self, Write}; +use std::io::Write; use std::os::unix::process::ExitStatusExt; use std::path::PathBuf; use std::process; @@ -15,7 +15,7 @@ use tempfile::tempdir; use tempfile::TempDir; use uucore::error::{FromIo, UResult, USimpleError, UUsageError}; use uucore::parse_size::parse_size_u64; -use uucore::{crash, format_usage, help_about, help_section, help_usage}; +use uucore::{format_usage, help_about, help_section, help_usage}; const ABOUT: &str = help_about!("stdbuf.md"); const USAGE: &str = help_usage!("stdbuf.md"); @@ -66,13 +66,13 @@ struct ProgramOptionsError(String); target_os = "netbsd", target_os = "dragonflybsd" ))] -fn preload_strings() -> (&'static str, &'static str) { - ("LD_PRELOAD", "so") +fn preload_strings() -> UResult<(&'static str, &'static str)> { + Ok(("LD_PRELOAD", "so")) } #[cfg(target_vendor = "apple")] -fn preload_strings() -> (&'static str, &'static str) { - ("DYLD_LIBRARY_PATH", "dylib") +fn preload_strings() -> UResult<(&'static str, &'static str)> { + Ok(("DYLD_LIBRARY_PATH", "dylib")) } #[cfg(not(any( @@ -83,10 +83,11 @@ fn preload_strings() -> (&'static str, &'static str) { target_os = "dragonflybsd", target_vendor = "apple" )))] -fn preload_strings() -> (&'static str, &'static str) { - use uucore::crash; - - crash!(1, "Command not supported for this operating system!") +fn preload_strings() -> UResult<(&'static str, &'static str)> { + Err(USimpleError::new( + 1, + "Command not supported for this operating system!", + )) } fn check_option(matches: &ArgMatches, name: &str) -> Result { @@ -102,7 +103,7 @@ fn check_option(matches: &ArgMatches, name: &str) -> Result parse_size_u64(x).map_or_else( - |e| crash!(125, "invalid mode {}", e), + |e| Err(ProgramOptionsError(format!("invalid mode {e}"))), |m| { Ok(BufferType::Size(m.try_into().map_err(|_| { ProgramOptionsError(format!( @@ -128,8 +129,8 @@ fn set_command_env(command: &mut process::Command, buffer_name: &str, buffer_typ } } -fn get_preload_env(tmp_dir: &TempDir) -> io::Result<(String, PathBuf)> { - let (preload, extension) = preload_strings(); +fn get_preload_env(tmp_dir: &TempDir) -> UResult<(String, PathBuf)> { + let (preload, extension) = preload_strings()?; let inject_path = tmp_dir.path().join("libstdbuf").with_extension(extension); let mut file = File::create(&inject_path)?; @@ -151,7 +152,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { let command_params: Vec<&str> = command_values.map(|s| s.as_ref()).collect(); let tmp_dir = tempdir().unwrap(); - let (preload_env, libstdbuf) = get_preload_env(&tmp_dir).map_err_context(String::new)?; + let (preload_env, libstdbuf) = get_preload_env(&tmp_dir)?; command.env(preload_env, libstdbuf); set_command_env(&mut command, "_STDBUF_I", &options.stdin); set_command_env(&mut command, "_STDBUF_O", &options.stdout); diff --git a/tests/by-util/test_stdbuf.rs b/tests/by-util/test_stdbuf.rs index 9a67dad9e..50de4c546 100644 --- a/tests/by-util/test_stdbuf.rs +++ b/tests/by-util/test_stdbuf.rs @@ -65,7 +65,7 @@ fn test_stdbuf_invalid_mode_fails() { .args(&[*option, "1024R", "head"]) .fails() .code_is(125) - .stderr_only("stdbuf: invalid mode '1024R': Value too large for defined data type\n"); + .usage_error("invalid mode '1024R': Value too large for defined data type"); #[cfg(not(target_pointer_width = "128"))] new_ucmd!() .args(&[*option, "1Y", "head"])