From: Denys Vlasenko Date: Mon, 26 Jun 2017 12:41:53 +0000 (+0200) Subject: pgrep: fix pgrep -flx "sleep 11" - saw "sleep 11" processes as "sleep 11 " X-Git-Tag: 1_27_0~11 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=4add757929a33203e6b5f829eb518654a73ad4e4;p=oweals%2Fbusybox.git pgrep: fix pgrep -flx "sleep 11" - saw "sleep 11" processes as "sleep 11 " function old new delta pgrep_main 584 597 +13 Signed-off-by: Denys Vlasenko --- diff --git a/procps/pgrep.c b/procps/pgrep.c index e932a32bc..461abfa34 100644 --- a/procps/pgrep.c +++ b/procps/pgrep.c @@ -156,22 +156,28 @@ int pgrep_main(int argc UNUSED_PARAM, char **argv) if (proc->pid == pid) continue; + if (ppid2match >= 0 && ppid2match != proc->ppid) + continue; + if (sid2match >= 0 && sid2match != proc->sid) + continue; + cmd = proc->argv0; if (!cmd) { cmd = proc->comm; } else { int i = proc->argv_len; + /* + * "sleep 11" looks like "sleep""\0""11""\0" in argv0. + * Make sure last "\0" does not get converted to " ": + */ + if (i && cmd[i-1] == '\0') + i--; while (--i >= 0) { if ((unsigned char)cmd[i] < ' ') cmd[i] = ' '; } } - if (ppid2match >= 0 && ppid2match != proc->ppid) - continue; - if (sid2match >= 0 && sid2match != proc->sid) - continue; - /* NB: OPT_INVERT is always 0 or 1 */ if (!argv[0] || (regexec(&re_buffer, cmd, 1, re_match, 0) == 0 /* match found */