Avoid opening System.map just to check it, etc.

This commit is contained in:
albert 2002-10-02 12:10:39 +00:00
parent 7b1aebf7c4
commit e96d6b6141
8 changed files with 122 additions and 65 deletions

View 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;

View 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);

View 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: */

View 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;

View 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? */

View 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 */
};

View 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;

4
top.c
View File

@ -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) */