]> granicus.if.org Git - procps-ng/commitdiff
Avoid opening System.map just to check it, etc.
authoralbert <>
Wed, 2 Oct 2002 12:10:39 +0000 (12:10 +0000)
committeralbert <>
Wed, 2 Oct 2002 12:10:39 +0000 (12:10 +0000)
proc/devname.c
proc/readproc.c
proc/readproc.h
ps/common.h
ps/display.c
ps/output.c
ps/sortformat.c
top.c

index a93f1fd9e583253e9a33e785f0ddc832bf71aedc..f41fde20ea4121f5e992279a1b06eedb3083ba87 100644 (file)
@@ -17,6 +17,7 @@
 #include <fcntl.h>
 #include <unistd.h>
 #include <sys/sysmacros.h>
+#include "version.h"
 #include "devname.h"
 
 #include <asm/page.h>
@@ -195,7 +196,9 @@ int dev_to_tty(char *ret, int chop, int dev, int pid, unsigned int flags) {
   int i = 0;
   int c;
   if((short)dev == (short)-1) goto fail;
-  if(  link_name(tmp, major(dev), minor(dev), pid, "tty"   )) goto abbrev;
+  if(linux_version_code > LINUX_VERSION(2, 5, 0)){ /* didn't get done yet */
+    if(link_name(tmp, major(dev), minor(dev), pid, "tty"   )) goto abbrev;
+  }
   if(driver_name(tmp, major(dev), minor(dev)               )) goto abbrev;
   if(  link_name(tmp, major(dev), minor(dev), pid, "fd/2"  )) goto abbrev;
   if( guess_name(tmp, major(dev), minor(dev)               )) goto abbrev;
index f9f0e8baac96919946fe022f220482681c43efed..9036b74aa1b8e730ace173dd0ec0fe0d50c3374a 100644 (file)
@@ -373,21 +373,32 @@ next_proc:                                /* get next PID for consideration */
     /* some number->text resolving which is time consuming */
     if (Do(FILLUSR)){
        strncpy(p->euser,   user_from_uid(p->euid), sizeof p->euser);
-        strncpy(p->egroup, group_from_gid(p->egid), sizeof p->egroup);
         if(Do(FILLSTATUS)) {
             strncpy(p->ruser,   user_from_uid(p->ruid), sizeof p->ruser);
-            strncpy(p->rgroup, group_from_gid(p->rgid), sizeof p->rgroup);
             strncpy(p->suser,   user_from_uid(p->suid), sizeof p->suser);
-            strncpy(p->sgroup, group_from_gid(p->sgid), sizeof p->sgroup);
             strncpy(p->fuser,   user_from_uid(p->fuid), sizeof p->fuser);
+        }
+    }
+
+    /* some number->text resolving which is time consuming */
+    if (Do(FILLGRP)){
+        strncpy(p->egroup, group_from_gid(p->egid), sizeof p->egroup);
+        if(Do(FILLSTATUS)) {
+            strncpy(p->rgroup, group_from_gid(p->rgid), sizeof p->rgroup);
+            strncpy(p->sgroup, group_from_gid(p->sgid), sizeof p->sgroup);
             strncpy(p->fgroup, group_from_gid(p->fgid), sizeof p->fgroup);
         }
     }
 
     if (Do(FILLCMD))                           /* read+parse /proc/#/cmdline */
        p->cmdline = file2strvec(path, "cmdline");
+    else
+        p->cmdline = NULL;
+
     if (Do(FILLENV))                           /* read+parse /proc/#/environ */
        p->environ = file2strvec(path, "environ");
+    else
+        p->environ = NULL;
     
     if (p->state == 'Z')                       /* fixup cmd for zombies */
        strncat(p->cmd," <defunct>", sizeof p->cmd);
@@ -448,10 +459,10 @@ next_proc:                                /* get next PID for consideration */
        goto next_proc;                 /* error reading /proc/#/stat */
     stat2proc(sbuf, p);                                /* parse /proc/#/stat */
 
-/*    if (Do(FILLMEM)) {*/                             /* read, parse /proc/#/statm */
+    if (Do(FILLMEM)) {                         /* read, parse /proc/#/statm */
        if ((file2str(path, "statm", sbuf, sizeof sbuf)) != -1 )
            statm2proc(sbuf, p);                /* ignore statm errors here */
-/*    }                        */                      /* statm fields just zero */
+    }                                          /* statm fields just zero */
 
   /*  if (Do(FILLSTATUS)) { */        /* read, parse /proc/#/status */
        if ((file2str(path, "status", sbuf, sizeof sbuf)) != -1 ){
@@ -460,23 +471,34 @@ next_proc:                                /* get next PID for consideration */
 /*    }*/
 
     /* some number->text resolving which is time consuming */
- /*   if (Do(FILLUSR)){ */
+    if (Do(FILLUSR)){
        strncpy(p->euser,   user_from_uid(p->euid), sizeof p->euser);
-        strncpy(p->egroup, group_from_gid(p->egid), sizeof p->egroup);
 /*        if(Do(FILLSTATUS)) { */
             strncpy(p->ruser,   user_from_uid(p->ruid), sizeof p->ruser);
-            strncpy(p->rgroup, group_from_gid(p->rgid), sizeof p->rgroup);
             strncpy(p->suser,   user_from_uid(p->suid), sizeof p->suser);
-            strncpy(p->sgroup, group_from_gid(p->sgid), sizeof p->sgroup);
             strncpy(p->fuser,   user_from_uid(p->fuid), sizeof p->fuser);
+/*        }*/
+    }
+
+    /* some number->text resolving which is time consuming */
+    if (Do(FILLGRP)){
+        strncpy(p->egroup, group_from_gid(p->egid), sizeof p->egroup);
+/*        if(Do(FILLSTATUS)) { */
+            strncpy(p->rgroup, group_from_gid(p->rgid), sizeof p->rgroup);
+            strncpy(p->sgroup, group_from_gid(p->sgid), sizeof p->sgroup);
             strncpy(p->fgroup, group_from_gid(p->fgid), sizeof p->fgroup);
 /*        }*/
-/*    }*/
+    }
 
-/*    if (Do(FILLCMD)) */                      /* read+parse /proc/#/cmdline */
+    if (Do(FILLCMD))                           /* read+parse /proc/#/cmdline */
        p->cmdline = file2strvec(path, "cmdline");
-/*    if (Do(FILLENV)) */                      /* read+parse /proc/#/environ */
+    else
+        p->cmdline = NULL;
+
+    if (Do(FILLENV))                   /* read+parse /proc/#/environ */
        p->environ = file2strvec(path, "environ");
+    else
+        p->environ = NULL;
     
     if (p->state == 'Z')                       /* fixup cmd for zombies */
        strncat(p->cmd," <defunct>", sizeof p->cmd);
index ea1d67c2020ad9ab87df8d6ca59954e3833a7b39..a9127db97f92cc0813b18e6a2de713afa071845c 100644 (file)
@@ -194,10 +194,12 @@ extern void freeproc(proc_t* p);
 #define PROC_FILLMEM    0x01 /* read statm into the appropriate proc_t entries */
 #define PROC_FILLCMD    0x02 /* alloc and fill in `cmdline' part of proc_t */
 #define PROC_FILLENV    0x04 /* alloc and fill in `environ' part of proc_t */
-#define PROC_FILLUSR    0x08 /* resolve user id number -> user name via passwd */
-#define PROC_FILLSTATUS 0x10
-#define PROC_FILLSTAT   0x20
-#define PROC_FILLBUG    0x3f    /* No idea what we need */
+#define PROC_FILLUSR    0x08 /* resolve user id number -> user name */
+#define PROC_FILLGRP    0x10 /* resolve group id number -> group name */
+#define PROC_FILLSTATUS 0x20
+#define PROC_FILLSTAT   0x40
+#define PROC_FILLWCHAN  0x80
+#define PROC_FILLBUG    0xff    /* No idea what we need */
 
 
 /* Obsolete, consider only processes with one of the passed: */
index e6d9ea1c1c85f75effd2183796009caeacf64ad9..c0fc2f6fcef42e5494a4ca7f8158489ba4772f2c 100644 (file)
@@ -165,6 +165,7 @@ typedef struct sort_node {
   int (*sr)(const proc_t* P, const proc_t* Q); /* sort function */
   int reverse;   /* can sort backwards */
   int typecode;
+  int need;
 } sort_node;
 
 typedef struct format_node {
@@ -173,7 +174,7 @@ typedef struct format_node {
   int (*pr)(void);                         /* print function */
 /*  int (* const sr)(const proc_t* P, const proc_t* Q); */ /* sort function */
   int width;
-  int pad;
+  int need;
   int vendor;                             /* Vendor that invented this */
   int flags;
   int typecode;
@@ -185,7 +186,7 @@ typedef struct format_struct {
   int (* const pr)(void); /* print function */
   int (* const sr)(const proc_t* P, const proc_t* Q); /* sort function */
   const int width;
-  const int pad;    /* could be second width */
+  const int need;       /* data we will need (files to read, etc.) */
   const int vendor; /* Where does this come from? */
   const int flags;
 } format_struct;
index 792068090be15fda4729768d3519bb1482a5c71b..8243f371cf32888671c0953635e09e8721b72c44 100644 (file)
@@ -183,6 +183,29 @@ static void check_headers(void){
   if(!head_normal) lines_to_next_header = -1; /* how UNIX does --noheader */
 }
 
+static unsigned needs_for_format;
+static unsigned needs_for_sort;
+
+/***** check needs */
+/* see what files need to be read, etc. */
+static void check_needs(void){
+  format_node *walk_pr = format_list;
+  sort_node   *walk_sr = sort_list;
+  /* selection doesn't currently have expensive needs */
+
+  while(walk_pr){
+    needs_for_format |= walk_pr->need;
+    walk_pr = walk_pr->next;
+  }
+  if(bsd_e_option) needs_for_format |= PROC_FILLENV;
+
+  while(walk_sr){
+    needs_for_sort |= walk_sr->need;
+    walk_sr = walk_sr->next;
+  }
+
+}
+
 /***** fill in %CPU; not in libproc because of include_dead_children */
 static void fill_pcpu(proc_t *buf){
   unsigned long total_time;
@@ -200,19 +223,19 @@ static void fill_pcpu(proc_t *buf){
 static void simple_spew(void){
   proc_t buf;
   PROCTAB* ptp;
-  ptp = openproc(PROC_FILLBUG);
+  ptp = openproc(needs_for_format | needs_for_sort | PROC_FILLCMD);
   if(!ptp) {
     fprintf(stderr, "Error: can not access /proc.\n");
     exit(1);
   }
-  memset(&buf, '#', sizeof(proc_t));
+  /* memset(&buf, '#', sizeof(proc_t)); */
   /* use "ps_" prefix to catch library mismatch */
   while(ps_readproc(ptp,&buf)){
     fill_pcpu(&buf);
     if(want_this_proc(&buf)) show_one_proc(&buf);
     /* if(buf.cmdline) free(buf.cmdline); */   /* these crash */
     /* if(buf.environ) free(buf.environ); */
-    memset(&buf, '#', sizeof(proc_t));
+    /* memset(&buf, '#', sizeof(proc_t)); */
   }
   closeproc(ptp);
 }
@@ -337,7 +360,7 @@ static void fancy_spew(void){
   proc_t *retbuf = NULL;
   PROCTAB* ptp;
   int n = 0;  /* number of processes & index into array */
-  ptp = openproc(PROC_FILLBUG);
+  ptp = openproc(needs_for_format | needs_for_sort | PROC_FILLCMD);
   if(!ptp) {
     fprintf(stderr, "Error: can not access /proc.\n");
     exit(1);
@@ -395,7 +418,12 @@ int main(int argc, char *argv[]){
 
   init_output(); /* must be between parser and output */
   check_headers();
-  if (open_psdb(namelist_file)) wchan_is_number = 1;
+  check_needs();
+
+  /* filthy hack -- got to unify some stuff here */
+  if( ( (needs_for_format|needs_for_sort) & PROC_FILLWCHAN) && !wchan_is_number)
+    if (open_psdb(namelist_file)) wchan_is_number = 1;
+
   if(forest_type || sort_list) fancy_spew(); /* sort or forest */
   else simple_spew(); /* no sort, no forest */
   show_one_proc((proc_t *)-1); /* no output yet? */
index 091e3b958c91c8d3c50b333c0f7bb4c039a9dc6f..aed7366dd535dfcb0128f641c7b0122fc1836f79 100644 (file)
@@ -1085,8 +1085,9 @@ static int sr_context ( const proc_t* P, const proc_t* Q ) {
 #define MEM PROC_FILLMEM     /* read statm  */
 #define CMD PROC_FILLCMD     /* read cmdline */
 #define ENV PROC_FILLENV     /* read environ */
-#define USR PROC_FILLUSR     /* uid_t and gid_t -> user and group names */
-#define BUG PROC_FILLBUG     /* what does this need? */
+#define USR PROC_FILLUSR     /* uid_t -> user names */
+#define GRP PROC_FILLGRP     /* gid_t -> group names */
+#define WCH PROC_FILLWCHAN   /* do WCHAN lookup */
 
 /* TODO
  *      pull out annoying BSD aliases into another table (to macro table?)
@@ -1100,7 +1101,7 @@ static int sr_context ( const proc_t* P, const proc_t* Q ) {
 
 /* Many of these are placeholders for unsupported options. */
 static const format_struct format_array[] = {
-/* code       header     print()      sort()    width  ?   vendor flags  */
+/* code       header     print()      sort()    width need vendor flags  */
 {"%cpu",      "%CPU",    pr_pcpu,     sr_pcpu,    4,   0,    BSD, RIGHT}, /*pcpu*/
 {"%mem",      "%MEM",    pr_pmem,     sr_nop,     4,   0,    BSD, RIGHT}, /*pmem*/
 {"acflag",    "ACFLG",   pr_nop,      sr_nop,     5,   0,    XXX, RIGHT}, /*acflg*/
@@ -1133,31 +1134,31 @@ static const format_struct format_array[] = {
 {"cursig",    "CURSIG",  pr_nop,      sr_nop,     6,   0,    DEC, RIGHT},
 {"cutime",    "-",       pr_nop,      sr_cutime,  1,   0,    LNX, RIGHT},
 {"cwd",       "CWD",     pr_nop,      sr_nop,     3,   0,    LNX, LEFT},
-{"drs",       "DRS",     pr_drs,      sr_drs,     4,   0,    LNX, RIGHT},
+{"drs",       "DRS",     pr_drs,      sr_drs,     4, MEM,    LNX, RIGHT},
 {"dsiz",      "DSIZ",    pr_dsiz,     sr_nop,     4,   0,    LNX, RIGHT},
 {"egid",      "EGID",    pr_egid,     sr_egid,    5,   0,    LNX, RIGHT},
-{"egroup",    "EGROUP",  pr_egroup,   sr_egroup,  8,   0,    LNX, USER},
+{"egroup",    "EGROUP",  pr_egroup,   sr_egroup,  8, GRP,    LNX, USER},
 {"eip",       "EIP",     pr_eip,      sr_kstk_eip, 8,  0,    LNX, RIGHT},
 {"end_code",  "E_CODE",  pr_nop,      sr_end_code, 8,  0,    LNx, RIGHT},
-{"environ","ENVIRONMENT",pr_nop,      sr_nop,    11,   0,    LNx, UNLIMITED},
+{"environ","ENVIRONMENT",pr_nop,      sr_nop,    11, ENV,    LNx, UNLIMITED},
 {"esp",       "ESP",     pr_esp,      sr_kstk_esp, 8,  0,    LNX, RIGHT},
 {"etime",     "ELAPSED", pr_etime,    sr_nop,    11,   0,    U98, RIGHT}, /* was 7 wide */
 {"euid",      "EUID",    pr_euid,     sr_euid,    5,   0,    LNX, RIGHT},
-{"euser",     "EUSER",   pr_euser,    sr_euser,   8,   0,    LNX, USER},
+{"euser",     "EUSER",   pr_euser,    sr_euser,   8, USR,    LNX, USER},
 {"f",         "F",       pr_flag,     sr_nop,     1,   0,    XXX, RIGHT}, /*flags*/
 {"fgid",      "FGID",    pr_fgid,     sr_fgid,    5,   0,    LNX, RIGHT},
-{"fgroup",    "FGROUP",  pr_fgroup,   sr_fgroup,  8,   0,    LNX, USER},
+{"fgroup",    "FGROUP",  pr_fgroup,   sr_fgroup,  8, GRP,    LNX, USER},
 {"flag",      "F",       pr_flag,     sr_flags,   1,   0,    DEC, RIGHT},
 {"flags",     "F",       pr_flag,     sr_flags,   1,   0,    BSD, RIGHT}, /*f*/ /* was FLAGS, 8 wide */
 {"fname",     "COMMAND", pr_fname,    sr_nop,     8,   0,    SUN, LEFT},
 {"fsgid",     "FSGID",   pr_fgid,     sr_fgid,    5,   0,    LNX, RIGHT},
-{"fsgroup",   "FSGROUP", pr_fgroup,   sr_fgroup,  8,   0,    LNX, USER},
+{"fsgroup",   "FSGROUP", pr_fgroup,   sr_fgroup,  8, GRP,    LNX, USER},
 {"fsuid",     "FSUID",   pr_fuid,     sr_fuid,    5,   0,    LNX, RIGHT},
-{"fsuser",    "FSUSER",  pr_fuser,    sr_fuser,   8,   0,    LNX, USER},
+{"fsuser",    "FSUSER",  pr_fuser,    sr_fuser,   8, USR,    LNX, USER},
 {"fuid",      "FUID",    pr_fuid,     sr_fuid,    5,   0,    LNX, RIGHT},
-{"fuser",     "FUSER",   pr_fuser,    sr_fuser,   8,   0,    LNX, USER},
+{"fuser",     "FUSER",   pr_fuser,    sr_fuser,   8, USR,    LNX, USER},
 {"gid",       "GID",     pr_egid,     sr_egid,    5,   0,    SUN, RIGHT},
-{"group",     "GROUP",   pr_egroup,   sr_egroup,  5,   0,    U98, USER}, /* was 8 wide */
+{"group",     "GROUP",   pr_egroup,   sr_egroup,  5, GRP,    U98, USER}, /* was 8 wide */
 {"ignored",   "IGNORED", pr_sigignore,sr_nop,     9,   0,    BSD, SIGNAL}, /*sigignore*/
 {"inblk",     "INBLK",   pr_nop,      sr_nop,     5,   0,    BSD, RIGHT}, /*inblock*/
 {"inblock",   "INBLK",   pr_nop,      sr_nop,     5,   0,    DEC, RIGHT}, /*inblk*/
@@ -1172,16 +1173,16 @@ static const format_struct format_array[] = {
 {"longtname", "TTY",     pr_tty8,     sr_tty,     8,   0,    DEC, LEFT},
 {"lstart",    "STARTED", pr_lstart,   sr_nop,    24,   0,    XXX, RIGHT},
 {"luid",      "LUID",    pr_nop,      sr_nop,     5,   0,    LNX, RIGHT}, /* login ID */
-{"luser",     "LUSER",   pr_nop,      sr_nop,     8,   0,    LNX, USER}, /* login USER */
+{"luser",     "LUSER",   pr_nop,      sr_nop,     8, USR,    LNX, USER}, /* login USER */
 {"lwp",       "LWP",     pr_thread,   sr_nop,     5,   0,    SUN, RIGHT},
-{"m_drs",     "DRS",     pr_drs,      sr_drs,     5,   0,    LNx, RIGHT},
-{"m_dt",      "DT",      pr_nop,      sr_dt,      4,   0,    LNx, RIGHT},
-{"m_lrs",     "LRS",     pr_nop,      sr_lrs,     5,   0,    LNx, RIGHT},
-{"m_resident", "RES",    pr_nop,      sr_resident, 5,  0,    LNx, RIGHT},
-{"m_share",   "SHRD",    pr_nop,      sr_share,   5,   0,    LNx, RIGHT},
-{"m_size",    "SIZE",    pr_nop,      sr_size,    5,   0,    LNx, RIGHT},
+{"m_drs",     "DRS",     pr_drs,      sr_drs,     5, MEM,    LNx, RIGHT},
+{"m_dt",      "DT",      pr_nop,      sr_dt,      4, MEM,    LNx, RIGHT},
+{"m_lrs",     "LRS",     pr_nop,      sr_lrs,     5, MEM,    LNx, RIGHT},
+{"m_resident", "RES",    pr_nop,      sr_resident, 5,MEM,    LNx, RIGHT},
+{"m_share",   "SHRD",    pr_nop,      sr_share,   5, MEM,    LNx, RIGHT},
+{"m_size",    "SIZE",    pr_nop,      sr_size,    5, MEM,    LNx, RIGHT},
 {"m_swap",    "SWAP",    pr_nop,      sr_nop,     5,   0,    LNx, RIGHT},
-{"m_trs",     "TRS",     pr_trs,      sr_trs,     5,   0,    LNx, RIGHT},
+{"m_trs",     "TRS",     pr_trs,      sr_trs,     5, MEM,    LNx, RIGHT},
 {"maj_flt",   "MAJFL",   pr_majflt,   sr_maj_flt, 6,   0,    LNX, CUMUL|RIGHT},
 {"majflt",    "MAJFLT",  pr_majflt,   sr_maj_flt, 6,   0,    XXX, RIGHT},
 {"min_flt",   "MINFL",   pr_minflt,   sr_min_flt, 6,   0,    LNX, CUMUL|RIGHT},
@@ -1221,16 +1222,16 @@ static const format_struct format_array[] = {
 {"psr",       "PSR",     pr_psr,      sr_nop,     3,   0,    DEC, RIGHT},
 {"psxpri",    "PPR",     pr_nop,      sr_nop,     3,   0,    DEC, RIGHT},
 {"re",        "RE",      pr_nop,      sr_nop,     3,   0,    BSD, RIGHT},
-{"resident",  "RES",     pr_nop,      sr_resident, 5,  0,    LNX, RIGHT},
+{"resident",  "RES",     pr_nop,      sr_resident, 5,MEM,    LNX, RIGHT},
 {"rgid",      "RGID",    pr_rgid,     sr_rgid,    5,   0,    XXX, RIGHT},
-{"rgroup",    "RGROUP",  pr_rgroup,   sr_rgroup,  6,   0,    U98, USER}, /* was 8 wide */
+{"rgroup",    "RGROUP",  pr_rgroup,   sr_rgroup,  8, GRP,    U98, USER}, /* was 8 wide */
 {"rlink",     "RLINK",   pr_nop,      sr_nop,     8,   0,    BSD, RIGHT},
 {"rss",       "RSS",     pr_rss,      sr_rss,     4,   0,    XXX, RIGHT}, /* was 5 wide */
 {"rssize",    "RSS",     pr_rss,      sr_vm_rss,  4,   0,    DEC, RIGHT}, /*rsz*/
 {"rsz",       "RSZ",     pr_rss,      sr_vm_rss,  4,   0,    BSD, RIGHT}, /*rssize*/
 {"rtprio",    "RTPRIO",  pr_nop,      sr_nop,     7,   0,    BSD, RIGHT},
 {"ruid",      "RUID",    pr_ruid,     sr_ruid,    5,   0,    XXX, RIGHT},
-{"ruser",     "RUSER",   pr_ruser,    sr_ruser,   8,   0,    U98, USER},
+{"ruser",     "RUSER",   pr_ruser,    sr_ruser,   8, USR,    U98, USER},
 {"s",         "S",       pr_s,        sr_state,   1,   0,    SUN, LEFT}, /*stat,state*/
 {"sched",     "SCH",     pr_nop,      sr_nop,     1,   0,    AIX, RIGHT},
 {"scnt",      "SCNT",    pr_nop,      sr_nop,     4,   0,    DEC, RIGHT},  /* man page misspelling of scount? */
@@ -1241,8 +1242,8 @@ static const format_struct format_array[] = {
 {"sgi_p",     "P",       pr_sgi_p,    sr_nop,     1,   0,    LNX, RIGHT}, /* "cpu" number */
 {"sgi_rss",   "RSS",     pr_rss,      sr_nop,     4,   0,    LNX, LEFT}, /* SZ:RSS */
 {"sgid",      "SGID",    pr_sgid,     sr_sgid,    5,   0,    LNX, RIGHT},
-{"sgroup",    "SGROUP",  pr_sgroup,   sr_sgroup,  8,   0,    LNX, USER},
-{"share",     "-",       pr_nop,      sr_share,   1,   0,    LNX, RIGHT},
+{"sgroup",    "SGROUP",  pr_sgroup,   sr_sgroup,  8, GRP,    LNX, USER},
+{"share",     "-",       pr_nop,      sr_share,   1, MEM,    LNX, RIGHT},
 {"sid",       "SID",     pr_sess,     sr_session, 5,   0,    XXX, RIGHT}, /* Sun & HP */
 {"sig",       "PENDING", pr_sig,      sr_nop,     9,   0,    XXX, SIGNAL}, /*pending*/
 {"sig_block", "BLOCKED",  pr_sigmask, sr_nop,     9,   0,    LNX, SIGNAL},
@@ -1252,7 +1253,7 @@ static const format_struct format_array[] = {
 {"sigcatch",  "CAUGHT",  pr_sigcatch, sr_nop,     9,   0,    XXX, SIGNAL}, /*caught*/
 {"sigignore", "IGNORED", pr_sigignore,sr_nop,     9,   0,    XXX, SIGNAL}, /*ignored*/
 {"sigmask",   "BLOCKED", pr_sigmask,  sr_nop,     9,   0,    XXX, SIGNAL}, /*blocked*/
-{"size",      "-",       pr_nop,      sr_size,    1,   0,    SCO, RIGHT},
+{"size",      "-",       pr_nop,      sr_size,    1, MEM,    SCO, RIGHT},
 {"sl",        "SL",      pr_nop,      sr_nop,     3,   0,    XXX, RIGHT},
 {"spid",      "SPID",    pr_thread,   sr_nop,     5,   0,    SGI, RIGHT},
 {"stackp",    "STACKP",  pr_stackp,   sr_nop,     8,   0,    LNX, RIGHT}, /*start_stack*/
@@ -1265,11 +1266,11 @@ static const format_struct format_array[] = {
 {"status",    "STATUS",  pr_nop,      sr_nop,     6,   0,    DEC, RIGHT},
 {"stime",     "STIME",   pr_stime,    sr_stime,   5,   0,    XXX, /* CUMUL| */RIGHT}, /* was 6 wide */
 {"suid",      "SUID",    pr_suid,     sr_suid,    5,   0,    LNx, RIGHT},
-{"suser",     "SUSER",   pr_suser,    sr_suser,   8,   0,    LNx, USER},
+{"suser",     "SUSER",   pr_suser,    sr_suser,   8, USR,    LNx, USER},
 {"svgid",     "SVGID",   pr_sgid,     sr_sgid,    5,   0,    XXX, RIGHT},
-{"svgroup",   "SVGROUP", pr_sgroup,   sr_sgroup,  8,   0,    LNX, USER},
+{"svgroup",   "SVGROUP", pr_sgroup,   sr_sgroup,  8, GRP,    LNX, USER},
 {"svuid",     "SVUID",   pr_suid,     sr_suid,    5,   0,    XXX, RIGHT},
-{"svuser",    "SVUSER",  pr_suser,    sr_suser,   8,   0,    LNX, USER},
+{"svuser",    "SVUSER",  pr_suser,    sr_suser,   8, USR,    LNX, USER},
 {"systime",   "SYSTEM",  pr_nop,      sr_nop,     6,   0,    DEC, RIGHT},
 {"sz",        "SZ",      pr_sz,       sr_nop,     5,   0,    HPU, RIGHT},
 {"tdev",      "TDEV",    pr_nop,      sr_nop,     4,   0,    XXX, RIGHT},
@@ -1280,8 +1281,8 @@ static const format_struct format_array[] = {
 {"tmout",     "TMOUT",   pr_timeout,  sr_timeout, 5,   0,    LNX, RIGHT},
 {"tname",     "TTY",     pr_tty8,     sr_tty,     8,   0,    DEC, LEFT},
 {"tpgid",     "TPGID",   pr_tpgid,    sr_tpgid,   5,   0,    XXX, RIGHT},
-{"trs",       "TRS",     pr_trs,      sr_trs,     4,   0,    AIX, RIGHT},
-{"trss",      "TRSS",    pr_trs,      sr_trs,     4,   0,    BSD, RIGHT}, /* 4.3BSD NET/2 */
+{"trs",       "TRS",     pr_trs,      sr_trs,     4, MEM,    AIX, RIGHT},
+{"trss",      "TRSS",    pr_trs,      sr_trs,     4, MEM,    BSD, RIGHT}, /* 4.3BSD NET/2 */
 {"tsess",     "TSESS",   pr_nop,      sr_nop,     5,   0,    BSD, RIGHT},
 {"tsession",  "TSESS",   pr_nop,      sr_nop,     5,   0,    DEC, RIGHT},
 {"tsiz",      "TSIZ",    pr_tsiz,     sr_nop,     4,   0,    BSD, RIGHT},
@@ -1293,12 +1294,12 @@ static const format_struct format_array[] = {
 {"ucmd",      "CMD",     pr_comm,     sr_cmd,    16,   0,    DEC, UNLIMITED}, /*ucomm*/
 {"ucomm",     "COMMAND", pr_comm,     sr_nop,    16,   0,    XXX, UNLIMITED}, /*comm*/
 {"uid",       "UID",     pr_euid,     sr_euid,    5,   0,    XXX, RIGHT},
-{"uid_hack",  "UID",     pr_euser,    sr_nop,     8,   0,    XXX, USER},
+{"uid_hack",  "UID",     pr_euser,    sr_nop,     8, USR,    XXX, USER},
 {"umask",     "UMASK",   pr_nop,      sr_nop,     5,   0,    DEC, RIGHT},
-{"uname",     "USER",    pr_euser,    sr_euser,   8,   0,    DEC, USER}, /* man page misspelling of user? */
+{"uname",     "USER",    pr_euser,    sr_euser,   8, USR,    DEC, USER}, /* man page misspelling of user? */
 {"upr",       "UPR",     pr_nop,      sr_nop,     3,   0,    BSD, RIGHT}, /*usrpri*/
 {"uprocp",    "-",       pr_nop,      sr_nop,     1,   0,    BSD, RIGHT},
-{"user",      "USER",    pr_euser,    sr_euser,   8,   0,    U98, USER}, /* BSD n forces this to UID */
+{"user",      "USER",    pr_euser,    sr_euser,   8, USR,    U98, USER}, /* BSD n forces this to UID */
 {"usertime",  "USER",    pr_nop,      sr_nop,     4,   0,    DEC, RIGHT},
 {"usrpri",    "UPR",     pr_nop,      sr_nop,     3,   0,    DEC, RIGHT}, /*upr*/
 {"utime",     "UTIME",   pr_nop,      sr_utime,   6,   0,    LNx, CUMUL|RIGHT},
@@ -1309,8 +1310,8 @@ static const format_struct format_array[] = {
 {"vm_stack",  "STACK",   pr_nop,      sr_vm_stack, 5,  0,    LNx, RIGHT},
 {"vsize",     "VSZ",     pr_vsz,      sr_vsize,   5,   0,    DEC, RIGHT}, /*vsz*/
 {"vsz",       "VSZ",     pr_vsz,      sr_vm_size, 5,   0,    U98, RIGHT}, /*vsize*/
-{"wchan",     "WCHAN",   pr_wchan,    sr_wchan,   6,   0,    XXX, WCHAN}, /* BSD n forces this to nwchan */ /* was 10 wide */
-{"wname",     "WCHAN",   pr_wname,    sr_nop,     6,   0,    SGI, WCHAN}, /* opposite of nwchan */
+{"wchan",     "WCHAN",   pr_wchan,    sr_wchan,   6, WCH,    XXX, WCHAN}, /* BSD n forces this to nwchan */ /* was 10 wide */
+{"wname",     "WCHAN",   pr_wname,    sr_nop,     6, WCH,    SGI, WCHAN}, /* opposite of nwchan */
 {"xstat",     "XSTAT",   pr_nop,      sr_nop,     5,   0,    BSD, RIGHT},
 {"~",         "-",       pr_nop,      sr_nop,     1,   0,    LNX, RIGHT}  /* NULL would ruin alphabetical order */
 };
index c6f7e64d59bd5afcd7254f85b59c09005b9cf2d6..3e71b3ad40c2fd8581704e2726adacbd2e15c924 100644 (file)
@@ -57,7 +57,7 @@ static format_node *do_one_spec(const char *spec, const char *override){
       strcpy(thisnode->name, fs->head);
     }
     thisnode->pr = fs->pr;
-    thisnode->pad = fs->pad;
+    thisnode->need = fs->need;
     thisnode->vendor = fs->vendor;
     thisnode->flags = fs->flags;
     thisnode->next = NULL;
@@ -183,7 +183,7 @@ double_percent:
       fnode->name = malloc(len+1);
       strcpy(fnode->name, buf);
       fnode->pr = NULL;     /* checked for */
-      fnode->pad = 0;
+      fnode->need = 0;
       fnode->vendor = AIX;
       fnode->flags = 0;
       fnode->next = NULL;
@@ -669,7 +669,7 @@ static const char *generate_sysv_list(void){
       fn->name = malloc(2);
       strcpy(fn->name, ":");
       fn->pr = NULL;     /* checked for */
-      fn->pad = 0;
+      fn->need = 0;
       fn->vendor = AIX;   /* yes, for SGI weirdness */
       fn->flags = 0;
       fn->next = format_list;
diff --git a/top.c b/top.c
index 0d0e2d9fca8d67120e05e50f2f05a4837a37e096..c417802d6509af357ca1b3bc1707c28fddb79376 100644 (file)
--- a/top.c
+++ b/top.c
@@ -807,9 +807,9 @@ static void *alloc_r (void *q, unsigned numb)
          * as follows:
          *    cpus[0] thru cpus[n] == tics for each separate cpu
          *    cpus[Cpu_tot]        == tics from the 1st /proc/stat line */
+#include <fcntl.h>
 static CPUS_t *refreshcpus (CPUS_t *cpus)
 {
-#include <fcntl.h>
    static FILE *fp = NULL;
    int i;
 
@@ -856,7 +856,7 @@ static proc_t **refreshprocs (proc_t **tbl)
 #define PTRsz  sizeof(proc_t *)         /* eyeball candy */
 #define ENTsz  sizeof(proc_t)
    static int flags = PROC_FILLMEM | PROC_FILLCMD | PROC_FILLUSR
-                    | PROC_FILLSTATUS | PROC_FILLSTAT;
+                    | PROC_FILLGRP | PROC_FILLSTATUS | PROC_FILLSTAT;
    static unsigned savmax = 0;          /* first time, Bypass: (i)  */
    proc_t *ptsk = (proc_t *)-1;         /* first time, Force: (ii)  */
    unsigned curmax = 0;                 /* every time  (jeeze)      */