1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-27 11:07:44 +00:00

Merge pull request #1369 from Dr-Emann/uucore_signals_cleanup

Uucore signals cleanup
This commit is contained in:
Alex Lyon 2019-04-30 19:41:05 -07:00 committed by GitHub
commit 0101351290
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -325,21 +325,65 @@ pub static ALL_SIGNALS: [Signal<'static>; 31] = [
];
pub fn signal_by_name_or_value(signal_name_or_value: &str) -> Option<usize> {
if signal_name_or_value == "0" {
return Some(0);
}
for signal in &ALL_SIGNALS {
let long_name = format!("SIG{}", signal.name);
if signal.name == signal_name_or_value || (signal_name_or_value == signal.value.to_string())
|| (long_name == signal_name_or_value)
{
return Some(signal.value);
if let Ok(value) = signal_name_or_value.parse() {
if is_signal(value) {
return Some(value);
} else {
return None;
}
}
None
let signal_name = signal_name_or_value.trim_left_matches("SIG");
ALL_SIGNALS
.iter()
.find(|s| s.name == signal_name)
.map(|s| s.value)
}
#[inline(always)]
pub fn is_signal(num: usize) -> bool {
num < ALL_SIGNALS.len()
// Named signals start at 1
num <= ALL_SIGNALS.len()
}
#[test]
fn signals_all_contiguous() {
for (i, signal) in ALL_SIGNALS.iter().enumerate() {
assert_eq!(signal.value, i + 1);
}
}
#[test]
fn signals_all_are_signal() {
for signal in &ALL_SIGNALS {
assert!(is_signal(signal.value));
}
}
#[test]
fn signal_by_value() {
assert_eq!(signal_by_name_or_value("0"), Some(0));
for signal in &ALL_SIGNALS {
assert_eq!(
signal_by_name_or_value(&signal.value.to_string()),
Some(signal.value)
);
}
}
#[test]
fn signal_by_short_name() {
for signal in &ALL_SIGNALS {
assert_eq!(signal_by_name_or_value(signal.name), Some(signal.value));
}
}
#[test]
fn signal_by_long_name() {
for signal in &ALL_SIGNALS {
assert_eq!(
signal_by_name_or_value(&format!("SIG{}", signal.name)),
Some(signal.value)
);
}
}