diff options
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.patch | 128 |
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); + } |