From 8d7b7ce4a8efc2ca7e918bf26b6cf048966c2b5f Mon Sep 17 00:00:00 2001 From: Haisham <47662901+m-haisham@users.noreply.github.com> Date: Sun, 14 Apr 2024 22:46:00 +0500 Subject: [PATCH 1/2] kill: accept all casings for signal names in --list --- src/uu/kill/src/kill.rs | 4 +++- tests/by-util/test_kill.rs | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/uu/kill/src/kill.rs b/src/uu/kill/src/kill.rs index 9ea51694dff..110e8a7a683 100644 --- a/src/uu/kill/src/kill.rs +++ b/src/uu/kill/src/kill.rs @@ -154,7 +154,9 @@ fn table() { fn print_signal(signal_name_or_value: &str) -> UResult<()> { for (value, &signal) in ALL_SIGNALS.iter().enumerate() { - if signal == signal_name_or_value || (format!("SIG{signal}")) == signal_name_or_value { + if signal.eq_ignore_ascii_case(signal_name_or_value) + || format!("SIG{signal}").eq_ignore_ascii_case(signal_name_or_value) + { println!("{value}"); return Ok(()); } else if signal_name_or_value == value.to_string() { diff --git a/tests/by-util/test_kill.rs b/tests/by-util/test_kill.rs index 5393d163adb..73b98f218f5 100644 --- a/tests/by-util/test_kill.rs +++ b/tests/by-util/test_kill.rs @@ -116,6 +116,25 @@ fn test_kill_list_one_signal_from_name() { .stdout_matches(&Regex::new("\\b9\\b").unwrap()); } +#[test] +fn test_kill_list_one_signal_ignore_case() { + // Use SIGKILL because it is 9 on all unixes. + new_ucmd!() + .arg("-l") + .arg("KiLl") + .succeeds() + .stdout_matches(&Regex::new("\\b9\\b").unwrap()); +} + +#[test] +fn test_kill_list_unknown_must_match_input_case() { + new_ucmd!() + .arg("-l") + .arg("IaMnOtAsIgNaL") // spell-checker:disable-line + .fails() + .stderr_contains("IaMnOtAsIgNaL"); // spell-checker:disable-line +} + #[test] fn test_kill_list_all_vertically() { // Check for a few signals. Do not try to be comprehensive. From 04f6cfa5fcf219b20c7077dcf8aaf468f4205625 Mon Sep 17 00:00:00 2001 From: Haisham <47662901+m-haisham@users.noreply.github.com> Date: Sun, 14 Apr 2024 23:13:17 +0500 Subject: [PATCH 2/2] kill: ignore signal case on -s --- src/uu/kill/src/kill.rs | 3 ++- tests/by-util/test_kill.rs | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/uu/kill/src/kill.rs b/src/uu/kill/src/kill.rs index 110e8a7a683..632055b8003 100644 --- a/src/uu/kill/src/kill.rs +++ b/src/uu/kill/src/kill.rs @@ -190,7 +190,8 @@ fn list(signals: &Vec) { } fn parse_signal_value(signal_name: &str) -> UResult { - let optional_signal_value = signal_by_name_or_value(signal_name); + let signal_name_upcase = signal_name.to_uppercase(); + let optional_signal_value = signal_by_name_or_value(&signal_name_upcase); match optional_signal_value { Some(x) => Ok(x), None => Err(USimpleError::new( diff --git a/tests/by-util/test_kill.rs b/tests/by-util/test_kill.rs index 73b98f218f5..4a6dd017b29 100644 --- a/tests/by-util/test_kill.rs +++ b/tests/by-util/test_kill.rs @@ -236,6 +236,17 @@ fn test_kill_with_signal_name_new_form() { assert_eq!(target.wait_for_signal(), Some(libc::SIGKILL)); } +#[test] +fn test_kill_with_signal_name_new_form_ignore_case() { + let mut target = Target::new(); + new_ucmd!() + .arg("-s") + .arg("KiLl") + .arg(format!("{}", target.pid())) + .succeeds(); + assert_eq!(target.wait_for_signal(), Some(libc::SIGKILL)); +} + #[test] fn test_kill_with_signal_prefixed_name_new_form() { let mut target = Target::new(); @@ -247,6 +258,29 @@ fn test_kill_with_signal_prefixed_name_new_form() { assert_eq!(target.wait_for_signal(), Some(libc::SIGKILL)); } +#[test] +fn test_kill_with_signal_prefixed_name_new_form_ignore_case() { + let mut target = Target::new(); + new_ucmd!() + .arg("-s") + .arg("SiGKiLl") + .arg(format!("{}", target.pid())) + .succeeds(); + assert_eq!(target.wait_for_signal(), Some(libc::SIGKILL)); +} + +#[test] +fn test_kill_with_signal_name_new_form_unknown_must_match_input_case() { + let target = Target::new(); + new_ucmd!() + .arg("-s") + .arg("IaMnOtAsIgNaL") // spell-checker:disable-line + .arg(format!("{}", target.pid())) + .fails() + .stderr_contains("unknown signal") + .stderr_contains("IaMnOtAsIgNaL"); // spell-checker:disable-line +} + #[test] fn test_kill_no_pid_provided() { // spell-checker:disable-line