[Pkg-sysvinit-commits] r1436 - in sysvinit-upstream/trunk: doc src
Petter Reinholdtsen
pere at alioth.debian.org
Sat Jul 11 07:29:02 UTC 2009
Author: pere
Date: 2009-07-11 07:29:01 +0000 (Sat, 11 Jul 2009)
New Revision: 1436
Modified:
sysvinit-upstream/trunk/doc/Changelog
sysvinit-upstream/trunk/src/killall5.c
Log:
Modify pidof to not print empty line if no pid was found.
Modified: sysvinit-upstream/trunk/doc/Changelog
===================================================================
--- sysvinit-upstream/trunk/doc/Changelog 2009-07-11 07:23:33 UTC (rev 1435)
+++ sysvinit-upstream/trunk/doc/Changelog 2009-07-11 07:29:01 UTC (rev 1436)
@@ -53,6 +53,7 @@
value is usable on re-exec. Patch from Thomas Hood.
* Add usleep in killall5 after killing processes, to force the kernel
to reschedule. Patch from SuSe.
+ * Modify pidof to not print empty line if no pid was found.
-- Petter Reinholdtsen <pere at debian.org> Fri, 30 Jul 2004 14:14:58 +0200
Modified: sysvinit-upstream/trunk/src/killall5.c
===================================================================
--- sysvinit-upstream/trunk/src/killall5.c 2009-07-11 07:23:33 UTC (rev 1435)
+++ sysvinit-upstream/trunk/src/killall5.c 2009-07-11 07:29:01 UTC (rev 1436)
@@ -378,8 +378,8 @@
int foundone = 0;
int ok = 0;
- /* Try to stat the executable. */
- if (prog[0] == '/' && stat(prog, &st) == 0) dostat++;
+ if (! prog)
+ return NULL;
/* Get basename of program. */
if ((s = strrchr(prog, '/')) == NULL)
@@ -387,9 +387,16 @@
else
s++;
+ if (! *s)
+ return NULL;
+
q = (PIDQ_HEAD *)xmalloc(sizeof(PIDQ_HEAD));
q = init_pid_q(q);
+ /* Try to stat the executable. */
+ if (prog[0] == '/' && stat(prog, &st) == 0)
+ dostat++;
+
/* First try to find a match based on dev/ino pair. */
if (dostat) {
for (p = plist; p; p = p->next) {
@@ -404,15 +411,35 @@
if (!foundone) for (p = plist; p; p = p->next) {
ok = 0;
- /* Compare name (both basename and full path) */
- ok += (p->argv0 && strcmp(p->argv0, prog) == 0);
- ok += (p->argv0 && strcmp(p->argv0base, s) == 0);
+ /* matching nonmatching
+ * proc name prog name prog name
+ * --- ----------- ------------
+ * b b, p/b, q/b
+ * p/b b, p/b q/b
+ *
+ * Algorithm: Match if:
+ * cmd = arg
+ * or cmd = base(arg)
+ * or base(cmd) = arg
+ *
+ * Specifically, do not match just because base(cmd) = base(arg)
+ * as was done in earlier versions of this program, since this
+ * allows /aaa/foo to match /bbb/foo .
+ */
+ ok |=
+ (p->argv0 && strcmp(p->argv0, prog) == 0)
+ || (p->argv0 && s != prog && strcmp(p->argv0, s) == 0)
+ || (p->argv0base && strcmp(p->argv0base, prog) == 0);
/* For scripts, compare argv[1] as well. */
- if (scripts_too && p->argv1 &&
- !strncmp(p->statname, p->argv1base, STATNAMELEN)) {
- ok += (strcmp(p->argv1, prog) == 0);
- ok += (strcmp(p->argv1base, s) == 0);
+ if (
+ scripts_too && p->statname && p->argv1base
+ && !strncmp(p->statname, p->argv1base, STATNAMELEN)
+ ) {
+ ok |=
+ (p->argv1 && strcmp(p->argv1, prog) == 0)
+ || (p->argv1 && s != prog && strcmp(p->argv1, s) == 0)
+ || (p->argv1base && strcmp(p->argv1base, prog) == 0);
}
/*
@@ -423,7 +450,7 @@
(p->argv0 == NULL ||
p->argv0[0] == 0 ||
strchr(p->argv0, ' '))) {
- ok += (strcmp(p->statname, s) == 0);
+ ok |= (strcmp(p->statname, s) == 0);
}
if (ok) add_pid_to_q(q, p);
}
@@ -574,7 +601,8 @@
}
}
}
- printf("\n");
+ if (!first)
+ printf("\n");
closelog();
return(first ? 1 : 0);
}
More information about the Pkg-sysvinit-commits
mailing list