mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 03:27:44 +00:00
Don't allocate in signal_by_name_or_value
This commit is contained in:
parent
8378c28242
commit
34eceae2ef
1 changed files with 23 additions and 12 deletions
|
@ -325,18 +325,23 @@ pub static ALL_SIGNALS: [Signal<'static>; 31] = [
|
||||||
];
|
];
|
||||||
|
|
||||||
pub fn signal_by_name_or_value(signal_name_or_value: &str) -> Option<usize> {
|
pub fn signal_by_name_or_value(signal_name_or_value: &str) -> Option<usize> {
|
||||||
if signal_name_or_value == "0" {
|
if let Ok(value) = signal_name_or_value.parse() {
|
||||||
return Some(0);
|
if is_signal(value) {
|
||||||
}
|
return Some(value);
|
||||||
for signal in &ALL_SIGNALS {
|
} else {
|
||||||
let long_name = format!("SIG{}", signal.name);
|
return None;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None
|
let signal_name = if signal_name_or_value.starts_with("SIG") {
|
||||||
|
&signal_name_or_value[3..]
|
||||||
|
} else {
|
||||||
|
&signal_name_or_value[..]
|
||||||
|
};
|
||||||
|
|
||||||
|
ALL_SIGNALS
|
||||||
|
.iter()
|
||||||
|
.find(|s| s.name == signal_name)
|
||||||
|
.map(|s| s.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
|
@ -363,7 +368,10 @@ fn signals_all_are_signal() {
|
||||||
fn signal_by_value() {
|
fn signal_by_value() {
|
||||||
assert_eq!(signal_by_name_or_value("0"), Some(0));
|
assert_eq!(signal_by_name_or_value("0"), Some(0));
|
||||||
for signal in &ALL_SIGNALS {
|
for signal in &ALL_SIGNALS {
|
||||||
assert_eq!(signal_by_name_or_value(&signal.value.to_string()), Some(signal.value));
|
assert_eq!(
|
||||||
|
signal_by_name_or_value(&signal.value.to_string()),
|
||||||
|
Some(signal.value)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -377,6 +385,9 @@ fn signal_by_short_name() {
|
||||||
#[test]
|
#[test]
|
||||||
fn signal_by_long_name() {
|
fn signal_by_long_name() {
|
||||||
for signal in &ALL_SIGNALS {
|
for signal in &ALL_SIGNALS {
|
||||||
assert_eq!(signal_by_name_or_value(&format!("SIG{}", signal.name)), Some(signal.value));
|
assert_eq!(
|
||||||
|
signal_by_name_or_value(&format!("SIG{}", signal.name)),
|
||||||
|
Some(signal.value)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue