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 <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-06-26 14:41:53 +02:00
parent 1c013fae28
commit 4add757929
1 changed files with 11 additions and 5 deletions

View File

@ -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 */