# HG changeset patch # User Rob Landley # Date 1355083024 21600 # Node ID 0faab963ea926bf4c76e6784d8f1298ec021db40 # Parent 43e6ec52aa291e7f0ce0be785587a1faaab8002a Meddle. The <1 has to come first in the option string, normalize whitespace, sprintf of %d maxes out at -2 billion ala 12 bytes with null terminator so we don't need a length check in a 4k buffer, use the "%*s" feature of printf to prepend whitespace for us, take advantage of c99 defining ! to return 0 or 1. diff -r 43e6ec52aa29 -r 0faab963ea92 toys/lsb/pidof.c --- a/toys/lsb/pidof.c Sat Dec 08 20:10:05 2012 +0100 +++ b/toys/lsb/pidof.c Sun Dec 09 13:57:04 2012 -0600 @@ -5,7 +5,7 @@ * * http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/pidof.html -USE_PIDOF(NEWTOY(pidof, "so:<1", TOYFLAG_USR|TOYFLAG_BIN)) +USE_PIDOF(NEWTOY(pidof, "<1so:", TOYFLAG_USR|TOYFLAG_BIN)) config PIDOF bool "pidof" @@ -27,28 +27,23 @@ static int print_pid(pid_t pid) { + char * res; + int len; + sprintf(toybuf, "%d", pid); + len = strlen(toybuf); + + // Check omit string if (toys.optflags & FLAG_o) { - char * res; - int len; - snprintf(toybuf, sizeof(toybuf), "%d", pid); - len = strlen(toybuf); - res = strstr(TT.omit, toybuf); - if (res && - (res == TT.omit || res[-1] == ',') && - (res[len] == ',' || res[len] == 0)) - // Found in omit string - return 1; + res = strstr(TT.omit, toybuf); + if (res && (res == TT.omit || res[-1] == ',') && + (res[len] == ',' || res[len] == 0)) return 1; } - - xprintf("%s%ld", toys.exitval ? "" : " ", (long)pid); + xprintf("%*s", len+(!toys.exitval), toybuf); toys.exitval = 0; - if (toys.optflags & FLAG_s) - return 0; - - return 1; + return !(toys.optflags & FLAG_s); } void pidof_main(void)