summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-process/pidof-bsd/files/pidof-bsd-20050501-gfbsd.patch')
-rw-r--r--sys-process/pidof-bsd/files/pidof-bsd-20050501-gfbsd.patch128
1 files changed, 128 insertions, 0 deletions
diff --git a/sys-process/pidof-bsd/files/pidof-bsd-20050501-gfbsd.patch b/sys-process/pidof-bsd/files/pidof-bsd-20050501-gfbsd.patch
new file mode 100644
index 000000000000..bb7a776b630d
--- /dev/null
+++ b/sys-process/pidof-bsd/files/pidof-bsd-20050501-gfbsd.patch
@@ -0,0 +1,128 @@
+? .pidof.c.swp
+? pidof
+? pidof.core
+Index: pidof.c
+===================================================================
+RCS file: /cvsroot/bmp-plugins/pidof/pidof.c,v
+retrieving revision 1.4
+diff -u -r1.4 pidof.c
+--- pidof.c 1 May 2005 16:26:19 -0000 1.4
++++ pidof.c 13 Sep 2005 16:11:08 -0000
+@@ -26,6 +26,7 @@
+ * $Id$
+ */
+
++#include <unistd.h>
+ #include <stdio.h>
+ #include <string.h>
+ #include <err.h>
+@@ -37,56 +38,91 @@
+ #include <fcntl.h>
+ #include <stdlib.h>
+ #include <sysexits.h>
++#include <libgen.h>
+
+-static int get_pid_of_process(char *process_name);
++static int get_pid_of_process(const char *process_name);
+ static void usage(void);
+
++static int match_argv;
++static pid_t own_pid;
++
+ static int
+-get_pid_of_process(char *process_name)
++get_pid_of_process(const char *process_name)
+ {
+ static kvm_t *kd = NULL;
+ struct kinfo_proc *p;
+- int i, n_processes, processes_found;
+-
+- processes_found = 0;
++ int i, n_processes,
++ processes_found = 0;
+
+ if ((kd = kvm_open("/dev/null", "/dev/null", "/dev/null", O_RDONLY, "kvm_open")) == NULL)
+ (void)errx(1, "%s", kvm_geterr(kd));
+ else {
+ p = kvm_getprocs(kd, KERN_PROC_PROC, 0, &n_processes);
+- for (i = 0; i<n_processes; i++)
+- if (strncmp(process_name, p[i].ki_comm, COMMLEN+1) == 0) {
+- (void)printf("%d ", (int)p[i].ki_pid);
+- processes_found++;
+- }
++ for (i = 0; i<n_processes; i++) {
++ if (p[i].ki_pid != own_pid)
++ if (strncmp(process_name, p[i].ki_comm, COMMLEN+1) == 0) {
++ (void)printf("%d ", (int)p[i].ki_pid);
++ processes_found++;
++ } else if (match_argv == 1) {
++ char **p_argv = NULL;
++
++ if ((p_argv = kvm_getargv(kd, p+i, 0)) != NULL)
++ for (; *p_argv != NULL; p_argv++)
++ if (strcmp(process_name, basename(*p_argv)) == 0) {
++ (void)printf("%d ", (int)p[i].ki_pid);
++ processes_found++;
++ break;
++ }
++ }
++ }
+
+ kvm_close(kd);
+ }
+-
+- return processes_found;
++
++ return (processes_found);
+ }
+
+ static void
+ usage()
+ {
+
+- (void)fprintf(stderr, "usage: pidof name1 name2 ...\n");
++ (void)fprintf(stderr, "usage: pidof [-x] name1 name2 ...\n");
+ exit(EX_USAGE);
+ }
+
+ int
+ main(int argc, char **argv)
+ {
+- int i, procs_found;
++ int i, procs_found,
++ ch;
+
+ procs_found = 0;
++ match_argv = 0;
+
+- if (argc <= 1)
+- usage();
++ own_pid = getpid();
++
++ while ((ch = getopt(argc, argv, "x")) != -1) {
++ switch (ch) {
++ case 'x':
++ match_argv = 1;
++ break;
++ case '?':
++ default:
++ usage();
++ break;
++ }
++ }
++ argc -= optind;
++ argv += optind;
+
+- for (i = 1; i<argc; procs_found += get_pid_of_process(argv[i++]));
++ if (argc < 1)
++ usage();
++
++ for (i = 0; i<argc; i++) {
++ procs_found += get_pid_of_process(argv[i]);
++ }
+
+ (void)printf("\n");
+
+- return (procs_found > 0) ? 0 : 1;
++ return ((procs_found > 0) ? 0 : 1);
+ }