[git commit] pgrep: fix pgrep -flx "sleep 11" - saw "sleep 11" processes as "sleep 11 "

Denys Vlasenko vda.linux at googlemail.com
Mon Jun 26 12:41:53 UTC 2017


commit: https://git.busybox.net/busybox/commit/?id=4add757929a33203e6b5f829eb518654a73ad4e4
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
pgrep_main                                           584     597     +13

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 procps/pgrep.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/procps/pgrep.c b/procps/pgrep.c
index e932a32..461abfa 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 */


More information about the busybox-cvs mailing list