Skip to content

Commit f0148e2

Browse files
committed
pkill: Simplify short signal number option handling
Translate short signal options like '-TERM' to '--signal=TERM' to simplify the code and also properly handle the case where both short and long form is used at the same time. Change parsing of the SigCgt field to use u64, as there are more than 32 signals.
1 parent cfe4cb3 commit f0148e2

File tree

1 file changed

+8
-15
lines changed

1 file changed

+8
-15
lines changed

src/uu/pkill/src/pkill.rs

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
5252
#[cfg(target_os = "windows")]
5353
let args = args.collect_ignore();
5454
#[cfg(unix)]
55-
let obs_signal = handle_obsolete(&mut args);
55+
handle_obsolete(&mut args);
5656

5757
let matches = uu_app().try_get_matches_from(&args)?;
5858

@@ -96,13 +96,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
9696

9797
// Parse signal
9898
#[cfg(unix)]
99-
let sig_num = if let Some(signal) = obs_signal {
100-
signal
101-
} else if let Some(signal) = matches.get_one::<String>("signal") {
102-
parse_signal_value(signal)?
103-
} else {
104-
15_usize //SIGTERM
105-
};
99+
let sig_num = parse_signal_value(matches.get_one::<String>("signal").unwrap())?;
106100

107101
#[cfg(unix)]
108102
let sig_name = signal_name_by_value(sig_num);
@@ -125,7 +119,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
125119
if matches.get_flag("require-handler") {
126120
pids.retain(|pid| {
127121
let mask =
128-
u32::from_str_radix(pid.clone().status().get("SigCgt").unwrap(), 16).unwrap();
122+
u64::from_str_radix(pid.clone().status().get("SigCgt").unwrap(), 16).unwrap();
129123
mask & (1 << sig_num) != 0
130124
});
131125
}
@@ -293,7 +287,7 @@ fn process_flag_o_n(
293287
}
294288

295289
#[cfg(unix)]
296-
fn handle_obsolete(args: &mut Vec<String>) -> Option<usize> {
290+
fn handle_obsolete(args: &mut [String]) {
297291
// Sanity check
298292
if args.len() > 2 {
299293
// Old signal can only be in the first argument position
@@ -302,13 +296,11 @@ fn handle_obsolete(args: &mut Vec<String>) -> Option<usize> {
302296
// Check if it is a valid signal
303297
let opt_signal = signal_by_name_or_value(signal);
304298
if opt_signal.is_some() {
305-
// remove the signal before return
306-
args.remove(1);
307-
return opt_signal;
299+
// Replace with long option that clap can parse
300+
args[1] = format!("--signal={}", signal);
308301
}
309302
}
310303
}
311-
None
312304
}
313305

314306
#[cfg(unix)]
@@ -372,7 +364,8 @@ pub fn uu_app() -> Command {
372364
// arg!(-s --session <SID> "match session IDs")
373365
// .value_delimiter(',')
374366
// .value_parser(clap::value_parser!(u64)),
375-
arg!(--signal <sig> "signal to send (either number or name)"),
367+
arg!(--signal <sig> "signal to send (either number or name)")
368+
.default_value("SIGTERM"),
376369
arg!(-t --terminal <tty> "match by controlling terminal").value_delimiter(','),
377370
// arg!(-u --euid <ID> "match by effective IDs")
378371
// .value_delimiter(',')

0 commit comments

Comments
 (0)