changeset 745:0faab963ea92

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.
author Rob Landley <rob@landley.net>
date Sun, 09 Dec 2012 13:57:04 -0600
parents 43e6ec52aa29
children 5caa4035c1c8
files toys/lsb/pidof.c
diffstat 1 files changed, 12 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- 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)