Unhealthy amount of manual code cleanup. Some long lines still remain.

This commit is contained in:
Dag-Erling Smørgrav 2004-07-05 14:45:57 +00:00
parent 1b39b2f671
commit 4946a00b0b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=131626

View File

@ -38,6 +38,7 @@
#include <kvm.h>
#include <math.h>
#include <nlist.h>
#include <paths.h>
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
@ -93,19 +94,19 @@ struct handle
*/
static char io_header[] =
" PID %-*.*s READ WRITE FAULT TOTAL PERCENT COMMAND";
" PID %-*.*s READ WRITE FAULT TOTAL PERCENT COMMAND";
#define io_Proc_format \
"%5d %-*.*s %6d %6d %6d %6d %6.2f%% %.*s"
"%5d %-*.*s %6ld %6ld %6ld %6ld %6.2f%% %.*s"
static char smp_header[] =
" PID %-*.*s PRI NICE SIZE RES STATE C TIME WCPU CPU COMMAND";
" PID %-*.*s PRI NICE SIZE RES STATE C TIME WCPU CPU COMMAND";
#define smp_Proc_format \
"%5d %-*.*s %3d %4d%7s %6s %-6.6s %1x%7s %5.2f%% %5.2f%% %.*s"
static char up_header[] =
" PID %-*.*s PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND";
" PID %-*.*s PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND";
#define up_Proc_format \
"%5d %-*.*s %3d %4d%7s %6s %-6.6s%.0d%7s %5.2f%% %5.2f%% %.*s"
@ -234,8 +235,9 @@ machine_init(struct statics *statics)
else if (namelength > 15)
namelength = 15;
if ((kd = kvm_open("/dev/null", "/dev/null", "/dev/null", O_RDONLY, "kvm_open")) == NULL)
return -1;
kd = kvm_open(NULL, _PATH_DEVNULL, NULL, O_RDONLY, "kvm_open");
if (kd == NULL)
return (-1);
GETSYSCTL("kern.ccpu", ccpu);
@ -249,8 +251,7 @@ machine_init(struct statics *statics)
/* get the page size with "getpagesize" and calculate pageshift from it */
pagesize = getpagesize();
pageshift = 0;
while (pagesize > 1)
{
while (pagesize > 1) {
pageshift++;
pagesize >>= 1;
}
@ -306,6 +307,7 @@ get_system_info(struct system_info *si)
int mib[2];
struct timeval boottime;
size_t bt_size;
int i;
/* get the cp_time array */
GETSYSCTL("kern.cp_time", cp_time);
@ -313,19 +315,8 @@ get_system_info(struct system_info *si)
GETSYSCTL("kern.lastpid", lastpid);
/* convert load averages to doubles */
{
int i;
double *infoloadp;
infoloadp = si->load_avg;
for (i = 0; i < 3; i++)
{
#ifdef notyet
*infoloadp++ = ((double) sysload.ldavg[i]) / sysload.fscale;
#endif
*infoloadp++ = loaddouble(sysload.ldavg[i]);
}
}
for (i = 0; i < 3; i++)
si->load_avg[i] = (double)sysload.ldavg[i] / sysload.fscale;
/* convert cp_time counts to percentages */
total = percentages(CPUSTATES, cpu_states, cp_time, cp_old, cp_diff);
@ -416,7 +407,7 @@ get_old_proc(struct kinfo_proc *pp)
if (previous_proc_count == 0)
return (NULL);
oldpp = bsearch(&pp, previous_pref, previous_proc_count,
sizeof(struct kinfo_proc *), compare_pid);
sizeof(*previous_pref), compare_pid);
if (oldpp == NULL)
return (NULL);
oldp = *oldpp;
@ -460,7 +451,7 @@ static struct handle handle;
caddr_t
get_process_info(struct system_info *si, struct process_select *sel,
int (*compare)())
int (*compare)(const void *, const void *))
{
int i;
int total_procs;
@ -483,9 +474,9 @@ get_process_info(struct system_info *si, struct process_select *sel,
*/
if (previous_proc_count_max < nproc) {
free(previous_procs);
previous_procs = malloc(nproc * sizeof(struct kinfo_proc));
previous_procs = malloc(nproc * sizeof(*previous_procs));
free(previous_pref);
previous_pref = malloc(nproc * sizeof(struct kinfo_proc *));
previous_pref = malloc(nproc * sizeof(*previous_pref));
if (previous_procs == NULL || previous_pref == NULL) {
(void) fprintf(stderr, "top: Out of memory.\n");
quit(23);
@ -495,16 +486,14 @@ get_process_info(struct system_info *si, struct process_select *sel,
if (nproc) {
for (i = 0; i < nproc; i++)
previous_pref[i] = &previous_procs[i];
bcopy(pbase, previous_procs, nproc * sizeof(struct kinfo_proc));
qsort(previous_pref, nproc,
sizeof(struct kinfo_proc *), compare_pid);
bcopy(pbase, previous_procs, nproc * sizeof(*previous_procs));
qsort(previous_pref, nproc, sizeof(*previous_pref), compare_pid);
}
previous_proc_count = nproc;
pbase = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc);
if (nproc > onproc)
pref = (struct kinfo_proc **) realloc(pref, sizeof(struct kinfo_proc *)
* (onproc = nproc));
pref = realloc(pref, sizeof(*pref) * (onproc = nproc));
if (pref == NULL || pbase == NULL) {
(void) fprintf(stderr, "top: Out of memory.\n");
quit(23);
@ -527,11 +516,7 @@ get_process_info(struct system_info *si, struct process_select *sel,
total_majflt = 0;
memset((char *)process_states, 0, sizeof(process_states));
prefp = pref;
for (pp = pbase, i = 0; i < nproc; pp++, i++)
{
/*
* Place pointers to each valid proc structure in pref[].
*/
for (pp = pbase, i = 0; i < nproc; pp++, i++) {
if (pp->ki_stat == 0)
/* not in use */
@ -550,7 +535,7 @@ get_process_info(struct system_info *si, struct process_select *sel,
total_oublock += p_oublock;
total_majflt += p_majflt;
total_procs++;
process_states[(unsigned char) pp->ki_stat]++;
process_states[pp->ki_stat]++;
if (pp->ki_stat == SZOMB)
/* skip zombies */
@ -575,8 +560,8 @@ get_process_info(struct system_info *si, struct process_select *sel,
* the rest of the process's threads rather than
* using the system's mostly-broken KERN_PROC_PROC.
*/
if (sel->thread || prev_pp == NULL || prev_pp->ki_pid != pp->ki_pid)
{
if (sel->thread || prev_pp == NULL ||
prev_pp->ki_pid != pp->ki_pid) {
*prefp++ = pp;
active_procs++;
prev_pp = pp;
@ -587,9 +572,7 @@ get_process_info(struct system_info *si, struct process_select *sel,
/* if requested, sort the "interesting" processes */
if (compare != NULL)
{
qsort((char *)pref, active_procs, sizeof(struct kinfo_proc *), compare);
}
qsort(pref, active_procs, sizeof(*pref), compare);
/* remember active and total counts */
si->p_total = total_procs;
@ -601,10 +584,10 @@ get_process_info(struct system_info *si, struct process_select *sel,
return ((caddr_t)&handle);
}
char fmt[128]; /* static area where result is built */
static char fmt[128]; /* static area where result is built */
char *
format_next_process(caddr_t handle, char *(*get_userid)())
format_next_process(caddr_t handle, char *(*get_userid)(int))
{
struct kinfo_proc *pp;
const struct kinfo_proc *oldp;
@ -626,15 +609,13 @@ format_next_process(caddr_t handle, char *(*get_userid)())
/*
* Print swapped processes as <pname>
*/
char *comm = pp->ki_comm;
#define COMSIZ sizeof(pp->ki_comm)
char buf[COMSIZ];
(void) strncpy(buf, comm, COMSIZ);
comm[0] = '<';
(void) strncpy(&comm[1], buf, COMSIZ - 2);
comm[COMSIZ - 2] = '\0';
(void) strncat(comm, ">", COMSIZ - 1);
comm[COMSIZ - 1] = '\0';
size_t len = strlen(pp->ki_comm);
if (len > sizeof(pp->ki_comm) - 3)
len = sizeof(pp->ki_comm) - 3;
memmove(pp->ki_comm + 1, pp->ki_comm, len);
pp->ki_comm[0] = '<';
pp->ki_comm[len + 1] = '>';
pp->ki_comm[len + 2] = '\0';
}
/*
@ -671,7 +652,7 @@ format_next_process(caddr_t handle, char *(*get_userid)())
if (state >= 0 &&
state < sizeof(state_abbrev) / sizeof(*state_abbrev))
sprintf(status, "%.6s", state_abbrev[(unsigned char) state]);
sprintf(status, "%.6s", state_abbrev[state]);
else
sprintf(status, "?%5d", state);
break;
@ -694,11 +675,11 @@ format_next_process(caddr_t handle, char *(*get_userid)())
pp->ki_pid,
namelength, namelength,
(*get_userid)(pp->ki_ruid),
(int)rup->ru_inblock,
(int)rup->ru_oublock,
(int)rup->ru_majflt,
(int)p_tot,
p_tot == 0 ? 0.0 : ((float)(p_tot * 100))/(float)s_tot,
rup->ru_inblock,
rup->ru_oublock,
rup->ru_majflt,
p_tot,
s_tot == 0 ? 0.0 : (p_tot * 100.0 / s_tot),
screen_width > cmdlengthdelta ?
screen_width - cmdlengthdelta : 0,
printable(pp->ki_comm));
@ -780,7 +761,7 @@ compare_pid(const void *p1, const void *p2)
* that reflects this ordering.
*/
static unsigned char sorted_state[] =
static int sorted_state[] =
{
0, /* not used */
3, /* sleep */
@ -792,54 +773,62 @@ static unsigned char sorted_state[] =
};
#define ORDERKEY_PCTCPU \
if (lresult = (long) p2->ki_pctcpu - (long) p1->ki_pctcpu, \
(result = lresult > 0 ? 1 : lresult < 0 ? -1 : 0) == 0)
#define ORDERKEY_PCTCPU(a, b) do { \
long diff = (b)->ki_pctcpu - (a)->ki_pctcpu; \
if (diff != 0) \
return (diff > 0 ? 1 : -1); \
} while (0)
#define ORDERKEY_CPTICKS \
if ((result = p2->ki_runtime > p1->ki_runtime ? 1 : \
p2->ki_runtime < p1->ki_runtime ? -1 : 0) == 0)
#define ORDERKEY_CPTICKS(a, b) do { \
int64_t diff = (b)->ki_runtime - (a)->ki_runtime; \
if (diff != 0) \
return (diff > 0 ? 1 : -1); \
} while (0)
#define ORDERKEY_STATE \
if ((result = sorted_state[(unsigned char) p2->ki_stat] - \
sorted_state[(unsigned char) p1->ki_stat]) == 0)
#define ORDERKEY_STATE(a, b) do { \
int diff = sorted_state[(b)->ki_stat] - sorted_state[(a)->ki_stat]; \
if (diff != 0) \
return (diff > 0 ? 1 : -1); \
} while (0)
#define ORDERKEY_PRIO \
if ((result = p2->ki_pri.pri_level - p1->ki_pri.pri_level) == 0)
#define ORDERKEY_PRIO(a, b) do { \
int diff = (b)->ki_pri.pri_level - (a)->ki_pri.pri_level; \
if (diff != 0) \
return (diff > 0 ? 1 : -1); \
} while (0)
#define ORDERKEY_RSSIZE \
if ((result = p2->ki_rssize - p1->ki_rssize) == 0)
#define ORDERKEY_RSSIZE(a, b) do { \
long diff = (b)->ki_rssize - (a)->ki_rssize; \
if (diff != 0) \
return (diff > 0 ? 1 : -1); \
} while (0)
#define ORDERKEY_MEM \
if ( (result = PROCSIZE(p2) - PROCSIZE(p1)) == 0 )
#define ORDERKEY_MEM(a, b) do { \
long diff = PROCSIZE((b)) - PROCSIZE((a)); \
if (diff != 0) \
return (diff > 0 ? 1 : -1); \
} while (0)
/* compare_cpu - the comparison function for sorting by cpu percentage */
int
#ifdef ORDER
compare_cpu(struct proc **pp1, struct proc **pp2)
compare_cpu(void *arg1, void *arg2)
#else
proc_compare(struct proc **pp1, struct proc **pp2)
proc_compare(void *arg1, void *arg2)
#endif
{
struct kinfo_proc *p1;
struct kinfo_proc *p2;
int result;
pctcpu lresult;
struct kinfo_proc *p1 = *(struct kinfo_proc **)arg1;
struct kinfo_proc *p2 = *(struct kinfo_proc **)arg2;
/* remove one level of indirection */
p1 = *(struct kinfo_proc **) pp1;
p2 = *(struct kinfo_proc **) pp2;
ORDERKEY_PCTCPU(p1, p2);
ORDERKEY_CPTICKS(p1, p2);
ORDERKEY_STATE(p1, p2);
ORDERKEY_PRIO(p1, p2);
ORDERKEY_RSSIZE(p1, p2);
ORDERKEY_MEM(p1, p2);
ORDERKEY_PCTCPU
ORDERKEY_CPTICKS
ORDERKEY_STATE
ORDERKEY_PRIO
ORDERKEY_RSSIZE
ORDERKEY_MEM
;
return (result);
return (0);
}
#ifdef ORDER
@ -858,112 +847,83 @@ int (*proc_compares[])() = {
/* compare_size - the comparison function for sorting by total memory usage */
int
compare_size(struct proc **pp1, struct proc **pp2)
compare_size(void *arg1, void *arg2)
{
struct kinfo_proc *p1;
struct kinfo_proc *p2;
int result;
pctcpu lresult;
struct kinfo_proc *p1 = *(struct kinfo_proc **)arg1;
struct kinfo_proc *p2 = *(struct kinfo_proc **)arg2;
/* remove one level of indirection */
p1 = *(struct kinfo_proc **) pp1;
p2 = *(struct kinfo_proc **) pp2;
ORDERKEY_MEM(p1, p2);
ORDERKEY_RSSIZE(p1, p2);
ORDERKEY_PCTCPU(p1, p2);
ORDERKEY_CPTICKS(p1, p2);
ORDERKEY_STATE(p1, p2);
ORDERKEY_PRIO(p1, p2);
ORDERKEY_MEM
ORDERKEY_RSSIZE
ORDERKEY_PCTCPU
ORDERKEY_CPTICKS
ORDERKEY_STATE
ORDERKEY_PRIO
;
return (result);
return (0);
}
/* compare_res - the comparison function for sorting by resident set size */
int
compare_res(struct proc **pp1, struct proc **pp2)
compare_res(void *arg1, void *arg2)
{
struct kinfo_proc *p1;
struct kinfo_proc *p2;
int result;
pctcpu lresult;
struct kinfo_proc *p1 = *(struct kinfo_proc **)arg1;
struct kinfo_proc *p2 = *(struct kinfo_proc **)arg2;
/* remove one level of indirection */
p1 = *(struct kinfo_proc **) pp1;
p2 = *(struct kinfo_proc **) pp2;
ORDERKEY_RSSIZE(p1, p2);
ORDERKEY_MEM(p1, p2);
ORDERKEY_PCTCPU(p1, p2);
ORDERKEY_CPTICKS(p1, p2);
ORDERKEY_STATE(p1, p2);
ORDERKEY_PRIO(p1, p2);
ORDERKEY_RSSIZE
ORDERKEY_MEM
ORDERKEY_PCTCPU
ORDERKEY_CPTICKS
ORDERKEY_STATE
ORDERKEY_PRIO
;
return (result);
return (0);
}
/* compare_time - the comparison function for sorting by total cpu time */
int
compare_time(struct proc **pp1, struct proc **pp2)
compare_time(void *arg1, void *arg2)
{
struct kinfo_proc *p1;
struct kinfo_proc *p2;
int result;
pctcpu lresult;
struct kinfo_proc *p1 = *(struct kinfo_proc **)arg1;
struct kinfo_proc *p2 = *(struct kinfo_proc **)arg2;
/* remove one level of indirection */
p1 = *(struct kinfo_proc **) pp1;
p2 = *(struct kinfo_proc **) pp2;
ORDERKEY_CPTICKS(p1, p2);
ORDERKEY_PCTCPU(p1, p2);
ORDERKEY_STATE(p1, p2);
ORDERKEY_PRIO(p1, p2);
ORDERKEY_RSSIZE(p1, p2);
ORDERKEY_MEM(p1, p2);
ORDERKEY_CPTICKS
ORDERKEY_PCTCPU
ORDERKEY_STATE
ORDERKEY_PRIO
ORDERKEY_RSSIZE
ORDERKEY_MEM
;
return (result);
return (0);
}
/* compare_prio - the comparison function for sorting by cpu percentage */
/* compare_prio - the comparison function for sorting by priority */
int
compare_prio(struct proc **pp1, struct proc **pp2)
compare_prio(void *arg1, void *arg2)
{
struct kinfo_proc *p1;
struct kinfo_proc *p2;
int result;
pctcpu lresult;
struct kinfo_proc *p1 = *(struct kinfo_proc **)arg1;
struct kinfo_proc *p2 = *(struct kinfo_proc **)arg2;
/* remove one level of indirection */
p1 = *(struct kinfo_proc **) pp1;
p2 = *(struct kinfo_proc **) pp2;
ORDERKEY_PRIO(p1, p2);
ORDERKEY_CPTICKS(p1, p2);
ORDERKEY_PCTCPU(p1, p2);
ORDERKEY_STATE(p1, p2);
ORDERKEY_RSSIZE(p1, p2);
ORDERKEY_MEM(p1, p2);
ORDERKEY_PRIO
ORDERKEY_CPTICKS
ORDERKEY_PCTCPU
ORDERKEY_STATE
ORDERKEY_RSSIZE
ORDERKEY_MEM
;
return (result);
return (0);
}
#endif
int
io_compare(struct proc **pp1, struct proc **pp2)
io_compare(void *arg1, void *arg2)
{
long t1, t2;
struct kinfo_proc *p1 = *(struct kinfo_proc **)arg1;
struct kinfo_proc *p2 = *(struct kinfo_proc **)arg2;
t1 = get_io_total((struct kinfo_proc *)*pp1);
t2 = get_io_total((struct kinfo_proc *)*pp2);
return (t2 - t1);
return (get_io_total(p2) - get_io_total(p1));
}
/*
* proc_owner(pid) - returns the uid that owns process "pid", or -1 if
@ -984,13 +944,10 @@ proc_owner(int pid)
prefp = pref;
cnt = pref_len;
while (--cnt >= 0)
{
while (--cnt >= 0) {
pp = *prefp++;
if (pp->ki_pid == (pid_t)pid)
{
return ((int)pp->ki_ruid);
}
}
return (-1);
}
@ -1014,7 +971,6 @@ swapmode(int *retavail, int *retfree)
*retavail = CONVERT(swapary[0].ksw_total);
*retfree = CONVERT(swapary[0].ksw_total - swapary[0].ksw_used);
n = (int)((double)swapary[0].ksw_used * 100.0 /
(double)swapary[0].ksw_total);
n = (int)(swapary[0].ksw_used * 100.0 / swapary[0].ksw_total);
return (n);
}