PID should be stored in pid_t, not int or long.
authorDenis Vlasenko <vda.linux@googlemail.com>
Wed, 1 Nov 2006 09:16:49 +0000 (09:16 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Wed, 1 Nov 2006 09:16:49 +0000 (09:16 -0000)
find_pid_by_name() was returning 0 or -1 in last array element,
but -1 was never checked. We can use just 0 intead.

include/libbb.h
init/halt.c
libbb/find_pid_by_name.c
libbb/procps.c
procps/kill.c
procps/pidof.c
procps/ps.c
procps/top.c

index 770c1ec..343a932 100644 (file)
@@ -501,11 +501,10 @@ void reset_ino_dev_hashtable(void);
 #endif
 #endif
 typedef struct {
-       int pid;
+       pid_t pid, ppid;
        char user[9];
        char state[4];
        unsigned long rss;
-       int ppid;
 #ifdef CONFIG_FEATURE_TOP_CPU_USAGE_PERCENTAGE
        unsigned pcpu;
        unsigned pscpu;
@@ -518,8 +517,8 @@ typedef struct {
        char short_cmd[COMM_LEN];
 } procps_status_t;
 procps_status_t* procps_scan(int save_user_arg0);
-long *find_pid_by_name( const char* pidName);
-long *pidlist_reverse(long *pidList);
+pid_t *find_pid_by_name(const char* procName);
+pid_t *pidlist_reverse(pid_t *pidList);
 
 
 extern const char bb_uuenc_tbl_base64[];
index 3ab41f1..a6cf48b 100644 (file)
@@ -25,29 +25,34 @@ RB_POWERDOWN,
 #endif
 RB_AUTOBOOT
        };
-       static const int signals[] = {SIGUSR1, SIGUSR2, SIGTERM};
+       static const int signals[] = { SIGUSR1, SIGUSR2, SIGTERM };
 
-       char *delay = "hpr";
+       char *delay;
        int which, flags, rc = 1;
 
        /* Figure out which applet we're running */
-       for(which=0;delay[which]!=*applet_name;which++);
+       for (which = 0; "hpr"[which] != *applet_name; which++);
 
        /* Parse and handle arguments */
        flags = getopt32(argc, argv, "d:nf", &delay);
-       if (flags&1) sleep(xatou(delay));
-       if (!(flags&2)) sync();
+       if (flags & 1) sleep(xatou(delay));
+       if (!(flags & 2)) sync();
 
        /* Perform action. */
        if (ENABLE_INIT && !(flags & 4)) {
                if (ENABLE_FEATURE_INITRD) {
-                       long *pidlist=find_pid_by_name("linuxrc");
-                       if (*pidlist>0) rc = kill(*pidlist,signals[which]);
-                       if (ENABLE_FEATURE_CLEAN_UP) free(pidlist);
+                       pid_t *pidlist = find_pid_by_name("linuxrc");
+                       if (pidlist[0] > 0)
+                               rc = kill(pidlist[0], signals[which]);
+                       if (ENABLE_FEATURE_CLEAN_UP)
+                               free(pidlist);
                }
-               if (rc) rc = kill(1,signals[which]);
-       } else rc = reboot(magic[which]);
+               if (rc)
+                       rc = kill(1, signals[which]);
+       } else
+               rc = reboot(magic[which]);
 
-       if (rc) bb_error_msg("no");
+       if (rc)
+               bb_error_msg("no");
        return rc;
 }
index 247d79f..05f7f96 100644 (file)
@@ -7,10 +7,6 @@
  * Licensed under the GPL v2 or later, see the file LICENSE in this tarball.
  */
 
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include <stdlib.h>
 #include "libbb.h"
 
 /* find_pid_by_name()
  *  Returns a list of all matching PIDs
  *  It is the caller's duty to free the returned pidlist.
  */
-long* find_pid_by_name(const char* pidName)
+pid_t* find_pid_by_name(const char* procName)
 {
-       long* pidList;
+       pid_t* pidList;
        int i = 0;
        procps_status_t* p;
 
-       pidList = xmalloc(sizeof(long));
+       pidList = xmalloc(sizeof(*pidList));
        while ((p = procps_scan(0)) != 0) {
-               if (strncmp(p->short_cmd, pidName, COMM_LEN-1) == 0) {
-                       pidList = xrealloc( pidList, sizeof(long) * (i+2));
+               if (strncmp(p->short_cmd, procName, COMM_LEN-1) == 0) {
+                       pidList = xrealloc(pidList, sizeof(*pidList) * (i+2));
                        pidList[i++] = p->pid;
                }
        }
 
-       pidList[i] = i==0 ? -1 : 0;
+       pidList[i] = 0;
        return pidList;
 }
 
-long *pidlist_reverse(long *pidList)
+pid_t *pidlist_reverse(pid_t *pidList)
 {
        int i = 0;
-       while (pidList[i] > 0 && ++i);
-       if (i-- > 0) {
-               long k;
+       while (pidList[i])
+               i++;
+       if (--i >= 0) {
+               pid_t k;
                int j;
                for (j = 0; i > j; i--, j++) {
                        k = pidList[i];
index eba9070..15a1cf7 100644 (file)
@@ -32,8 +32,9 @@ static int read_to_buf(const char *filename, void *buf)
 procps_status_t * procps_scan(int save_user_arg0)
 {
        static DIR *dir;
-       struct dirent *entry;
        static procps_status_t ret_status;
+
+       struct dirent *entry;
        char *name;
        int n;
        char status[32];
index b29f61b..f22bdbe 100644 (file)
@@ -103,31 +103,31 @@ do_it_now:
        }
 
        /* Pid or name required for kill/killall */
-       if (argc<1)
+       if (argc < 1)
                bb_show_usage();
 
        if (killall) {
                /* Looks like they want to do a killall.  Do that */
                pid = getpid();
                while (arg) {
-                       long* pidList;
+                       pid_t* pidList;
 
                        pidList = find_pid_by_name(arg);
-                       if (!pidList || *pidList<=0) {
+                       if (*pidList == 0) {
                                errors++;
                                if (!quiet)
                                        bb_error_msg("%s: no process killed", arg);
                        } else {
-                               long *pl;
+                               pid_t *pl;
 
-                               for (pl = pidList; *pl!=0; pl++) {
-                                       if (*pl==pid)
+                               for (pl = pidList; *pl; pl++) {
+                                       if (*pl == pid)
                                                continue;
-                                       if (kill(*pl, signo)!=0) {
-                                               errors++;
-                                               if (!quiet)
-                                                       bb_perror_msg("cannot kill pid %ld", *pl);
-                                       }
+                                       if (kill(*pl, signo) == 0)
+                                               continue;
+                                       errors++;
+                                       if (!quiet)
+                                               bb_perror_msg("cannot kill pid %u", (unsigned)*pl);
                                }
                        }
                        free(pidList);
@@ -138,12 +138,14 @@ do_it_now:
 
        /* Looks like they want to do a kill. Do that */
        while (arg) {
-               if (!isdigit(arg[0]) && arg[0]!='-')
+               /* Huh?
+               if (!isdigit(arg[0]) && arg[0] != '-')
                        bb_error_msg_and_die("bad pid '%s'", arg);
+               */
                pid = xatou(arg);
                /* FIXME: better overflow check? */
-               if (kill(pid, signo)!=0) {
-                       bb_perror_msg("cannot kill pid %ld", (long)pid);
+               if (kill(pid, signo) != 0) {
+                       bb_perror_msg("cannot kill pid %u", (unsigned)pid);
                        errors++;
                }
                arg = *++argv;
index 62c590f..28c5c04 100644 (file)
 #endif
 
 #if ENABLE_FEATURE_PIDOF_OMIT
-#define _OMIT_COMPL(a) a
-#define _OMIT(a) ,a
-#if ENABLE_FEATURE_PIDOF_SINGLE
-#define OMIT (1<<1)
-#else
-#define OMIT (1<<0)
-#endif
+# define _OMIT_COMPL(a) a
+# define _OMIT(a) ,a
+# if ENABLE_FEATURE_PIDOF_SINGLE
+#  define OMIT (1<<1)
+# else
+#  define OMIT (1<<0)
+# endif
 #else
-#define _OMIT_COMPL(a) ""
-#define _OMIT(a)
-#define OMIT (0)
-#define omitted (0)
+# define _OMIT_COMPL(a) ""
+# define _OMIT(a)
+# define OMIT (0)
+# define omitted (0)
 #endif
 
 int pidof_main(int argc, char **argv)
@@ -65,21 +65,23 @@ int pidof_main(int argc, char **argv)
 #endif
        /* Looks like everything is set to go.  */
        while (optind < argc) {
-               long *pidList;
-               long *pl;
+               pid_t *pidList;
+               pid_t *pl;
 
                /* reverse the pidlist like GNU pidof does.  */
                pidList = pidlist_reverse(find_pid_by_name(argv[optind]));
-               for (pl = pidList; *pl > 0; pl++) {
+               for (pl = pidList; *pl; pl++) {
 #if ENABLE_FEATURE_PIDOF_OMIT
                        unsigned omitted = 0;
                        if (opt & OMIT) {
                                llist_t *omits_p = omits;
-                               while (omits_p)
+                               while (omits_p) {
                                        if (xatoul(omits_p->data) == *pl) {
-                                               omitted = 1; break;
+                                               omitted = 1;
+                                               break;
                                        } else
                                                omits_p = omits_p->link;
+                               }
                        }
 #endif
                        if (!omitted) {
@@ -88,7 +90,7 @@ int pidof_main(int argc, char **argv)
                                } else {
                                        n = 1;
                                }
-                               printf("%ld", *pl);
+                               printf("%u", (unsigned)*pl);
                        }
                        fail = (!ENABLE_FEATURE_PIDOF_OMIT && omitted);
 
index 97e239b..df4dcc4 100644 (file)
@@ -58,7 +58,7 @@ int ps_main(int argc, char **argv)
                        len = sizeof(sbuf);
 
                        if (is_selinux_enabled()) {
-                               if (getpidcon(p->pid,&sid) < 0)
+                               if (getpidcon(p->pid, &sid) < 0)
                                        sid = NULL;
                        }
 
@@ -71,14 +71,14 @@ int ps_main(int argc, char **argv)
                        } else {
                                safe_strncpy(sbuf, "unknown", 7);
                        }
-                       len = printf("%5d %-32s %s ", p->pid, sbuf, p->state);
+                       len = printf("%5u %-32s %s ", (unsigned)p->pid, sbuf, p->state);
                }
                else
 #endif
                        if (p->rss == 0)
-                               len = printf("%5d %-8s        %s ", p->pid, p->user, p->state);
+                               len = printf("%5u %-8s        %s ", (unsigned)p->pid, p->user, p->state);
                        else
-                               len = printf("%5d %-8s %6ld %s ", p->pid, p->user, p->rss, p->state);
+                               len = printf("%5u %-8s %6ld %s ", (unsigned)p->pid, p->user, p->rss, p->state);
 
                i = terminal_width-len;
 
index d58fdda..3ff61df 100644 (file)
@@ -78,7 +78,7 @@ static int mult_lvl_cmp(void* a, void* b) {
    the next. Mostly used for sorting. */
 struct save_hist {
        int ticks;
-       int pid;
+       pid_t pid;
 };
 
 /*
@@ -119,7 +119,8 @@ static void get_jiffy_counts(void)
 static void do_stats(void)
 {
        procps_status_t *cur;
-       int pid, total_time, i, last_i, n;
+       pid_t pid;
+       int total_time, i, last_i, n;
        struct save_hist *new_hist;
 
        get_jiffy_counts();
@@ -328,9 +329,9 @@ static void display_status(int count, int scr_width)
                else
                        sprintf(rss_str_buf, "%7ld", s->rss);
                USE_FEATURE_TOP_CPU_USAGE_PERCENTAGE(pcpu = div((s->pcpu*pcpu_scale) >> pcpu_shift, 10);)
-               col -= printf("\n%5d %-8s %s  %s%6d%3u.%c" \
+               col -= printf("\n%5u %-8s %s  %s%6u%3u.%c" \
                                USE_FEATURE_TOP_CPU_USAGE_PERCENTAGE("%3u.%c") " ",
-                               s->pid, s->user, s->state, rss_str_buf, s->ppid,
+                               (unsigned)s->pid, s->user, s->state, rss_str_buf, (unsigned)s->ppid,
                                USE_FEATURE_TOP_CPU_USAGE_PERCENTAGE(pcpu.quot, '0'+pcpu.rem,)
                                pmem.quot, '0'+pmem.rem);
                if (col > 0)