diff options
Diffstat (limited to 'procps')
-rw-r--r-- | procps/pidof.c | 33 |
1 files changed, 14 insertions, 19 deletions
diff --git a/procps/pidof.c b/procps/pidof.c index 3541aee..01e587c 100644 --- a/procps/pidof.c +++ b/procps/pidof.c @@ -20,9 +20,9 @@ int pidof_main(int argc, char **argv); int pidof_main(int argc, char **argv) { unsigned first = 1; - unsigned fail = 1; unsigned opt; #if ENABLE_FEATURE_PIDOF_OMIT + char ppid_str[sizeof(int)*3 + 1]; llist_t *omits = NULL; /* list of pids to omit */ opt_complementary = "o::"; #endif @@ -35,14 +35,12 @@ int pidof_main(int argc, char **argv) #if ENABLE_FEATURE_PIDOF_OMIT /* fill omit list. */ { - char getppid_str[sizeof(int)*3 + 1]; - llist_t * omits_p = omits; + llist_t *omits_p = omits; while (omits_p) { /* are we asked to exclude the parent's process ID? */ - if (!strncmp(omits_p->data, "%PPID", 5)) { - llist_pop(&omits_p); - snprintf(getppid_str, sizeof(getppid_str), "%u", (unsigned)getppid()); - llist_add_to(&omits_p, getppid_str); + if (strcmp(omits_p->data, "%PPID") == 0) { + sprintf(ppid_str, "%u", (unsigned)getppid()); + omits_p->data = ppid_str; } omits_p = omits_p->link; } @@ -56,27 +54,24 @@ int pidof_main(int argc, char **argv) /* reverse the pidlist like GNU pidof does. */ pidList = pidlist_reverse(find_pid_by_name(argv[optind])); for (pl = pidList; *pl; pl++) { - SKIP_FEATURE_PIDOF_OMIT(const) unsigned omitted = 0; #if ENABLE_FEATURE_PIDOF_OMIT if (opt & OPT_OMIT) { llist_t *omits_p = omits; while (omits_p) { if (xatoul(omits_p->data) == *pl) { - omitted = 1; - break; - } else - omits_p = omits_p->link; + goto omitting; + } + omits_p = omits_p->link; } } #endif - if (!omitted) { - printf(" %u" + first, (unsigned)*pl); - first = 0; - } - fail = (!ENABLE_FEATURE_PIDOF_OMIT && omitted); - + printf(" %u" + first, (unsigned)*pl); + first = 0; if (ENABLE_FEATURE_PIDOF_SINGLE && (opt & OPT_SINGLE)) break; +#if ENABLE_FEATURE_PIDOF_OMIT + omitting: ; +#endif } free(pidList); optind++; @@ -87,5 +82,5 @@ int pidof_main(int argc, char **argv) if (ENABLE_FEATURE_CLEAN_UP) llist_free(omits, NULL); #endif - return fail ? EXIT_FAILURE : EXIT_SUCCESS; + return first; /* 1 (failure) - no processes found */ } |