1
#! /bin/sh /usr/share/dpatch/dpatch-run
2
## 20_pidof.dpatch by Petter Reinholdtsen
4
## All lines beginning with `## DP:' are a description of the patch.
5
## DP: Modify pidof to not print empty line if no pid was found. (bug: #225476)
8
diff -urNad trunk~/src/killall5.c trunk/src/killall5.c
9
--- trunk~/src/killall5.c 2008-03-26 09:30:38.000000000 +0100
10
+++ trunk/src/killall5.c 2008-03-26 09:31:14.000000000 +0100
15
- /* Try to stat the executable. */
16
- if (prog[0] == '/' && stat(prog, &st) == 0) dostat++;
20
/* Get basename of program. */
21
if ((s = strrchr(prog, '/')) == NULL)
29
q = (PIDQ_HEAD *)xmalloc(sizeof(PIDQ_HEAD));
32
+ /* Try to stat the executable. */
33
+ if (prog[0] == '/' && stat(prog, &st) == 0)
36
/* First try to find a match based on dev/ino pair. */
38
for (p = plist; p; p = p->next) {
40
if (!foundone) for (p = plist; p; p = p->next) {
43
- /* Compare name (both basename and full path) */
44
- ok += (p->argv0 && strcmp(p->argv0, prog) == 0);
45
- ok += (p->argv0 && strcmp(p->argv0base, s) == 0);
46
+ /* matching nonmatching
47
+ * proc name prog name prog name
48
+ * --- ----------- ------------
52
+ * Algorithm: Match if:
54
+ * or cmd = base(arg)
55
+ * or base(cmd) = arg
57
+ * Specifically, do not match just because base(cmd) = base(arg)
58
+ * as was done in earlier versions of this program, since this
59
+ * allows /aaa/foo to match /bbb/foo .
62
+ (p->argv0 && strcmp(p->argv0, prog) == 0)
63
+ || (p->argv0 && s != prog && strcmp(p->argv0, s) == 0)
64
+ || (p->argv0base && strcmp(p->argv0base, prog) == 0);
66
/* For scripts, compare argv[1] as well. */
67
- if (scripts_too && p->argv1 &&
68
- !strncmp(p->statname, p->argv1base, STATNAMELEN)) {
69
- ok += (strcmp(p->argv1, prog) == 0);
70
- ok += (strcmp(p->argv1base, s) == 0);
72
+ scripts_too && p->statname && p->argv1base
73
+ && !strncmp(p->statname, p->argv1base, STATNAMELEN)
76
+ (p->argv1 && strcmp(p->argv1, prog) == 0)
77
+ || (p->argv1 && s != prog && strcmp(p->argv1, s) == 0)
78
+ || (p->argv1base && strcmp(p->argv1base, prog) == 0);
85
strchr(p->argv0, ' '))) {
86
- ok += (strcmp(p->statname, s) == 0);
87
+ ok |= (strcmp(p->statname, s) == 0);
89
if (ok) add_pid_to_q(q, p);
99
return(first ? 1 : 0);