summaryrefslogtreecommitdiffstats
path: root/usr.bin/top
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1997-07-14 09:06:46 +0000
committerpeter <peter@FreeBSD.org>1997-07-14 09:06:46 +0000
commit18d0d6f155a4b71845b63f0f32acc5753c9a2b78 (patch)
treebc9a25dbf3c27fe8bfc557583ad1e26b0181e651 /usr.bin/top
parent2525533d2842fd056df13651bb09574e9284477a (diff)
downloadFreeBSD-src-18d0d6f155a4b71845b63f0f32acc5753c9a2b78.zip
FreeBSD-src-18d0d6f155a4b71845b63f0f32acc5753c9a2b78.tar.gz
Hack to work around the large username field... scan for the largest
username present on the system at startup and use that for the field width. It's not ideal but (I think) better than it was before. The width is limited to within 8..16.
Diffstat (limited to 'usr.bin/top')
-rw-r--r--usr.bin/top/machine.c44
1 files changed, 25 insertions, 19 deletions
diff --git a/usr.bin/top/machine.c b/usr.bin/top/machine.c
index 5c74c84..082729e 100644
--- a/usr.bin/top/machine.c
+++ b/usr.bin/top/machine.c
@@ -17,7 +17,7 @@
* Steven Wallace <swallace@freebsd.org>
* Wolfram Schneider <wosch@FreeBSD.org>
*
- * $Id: machine.c,v 1.3 1997/04/21 13:53:47 ache Exp $
+ * $Id: machine.c,v 1.4 1997/07/12 10:51:54 peter Exp $
*/
@@ -30,6 +30,7 @@
#include <nlist.h>
#include <math.h>
#include <kvm.h>
+#include <pwd.h>
#include <sys/errno.h>
#include <sys/sysctl.h>
#include <sys/dkstat.h>
@@ -54,7 +55,8 @@ static int getkval __P((unsigned long, int *, int, char *));
extern char* printable __P((char *));
int swapmode __P((int *retavail, int *retfree));
static int smpmode;
-
+static int namelength;
+static int cmdlength;
/* get_process_info passes back a handle. This is what it looks like: */
@@ -121,20 +123,16 @@ static struct nlist nlst[] = {
*/
static char smp_header[] =
- " PID X PRI NICE SIZE RES STATE C TIME WCPU CPU COMMAND";
-/* 0123456 -- field to fill in starts at header+6 */
-#define SMP_UNAME_START 6
+ " PID %-*.*s PRI NICE SIZE RES STATE C TIME WCPU CPU COMMAND";
#define smp_Proc_format \
- "%5d %-16.16s%3d%3d%7s %6s %-6.6s%1x%7s %5.2f%% %5.2f%% %.6s"
+ "%5d %-*.*s %3d %3d%7s %6s %-6.6s%1x%7s %5.2f%% %5.2f%% %.*s"
static char up_header[] =
- " PID X PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND";
-/* 0123456 -- field to fill in starts at header+6 */
-#define UP_UNAME_START 6
+ " PID %-*.*s PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND";
#define up_Proc_format \
- "%5d %-16.16s%3d %3d%7s %6s %-6.6s%.0d%7s %5.2f%% %5.2f%% %.6s"
+ "%5d %-*.*s %3d %3d%7s %6s %-6.6s%.0d%7s %5.2f%% %5.2f%% %.*s"
@@ -235,12 +233,22 @@ struct statics *statics;
register int i = 0;
register int pagesize;
int modelen;
+ struct passwd *pw;
modelen = sizeof(smpmode);
if (sysctlbyname("kern.smp_active", &smpmode, &modelen, NULL, 0) < 0 ||
modelen != sizeof(smpmode))
smpmode = 0;
+ while ((pw = getpwent()) != NULL) {
+ if (strlen(pw->pw_name) > namelength)
+ namelength = strlen(pw->pw_name);
+ }
+ if (namelength < 8)
+ namelength = 8;
+ if (namelength > 16)
+ namelength = 16;
+
if ((kd = kvm_open(NULL, NULL, NULL, O_RDONLY, "kvm_open")) == NULL)
return -1;
@@ -311,18 +319,14 @@ register char *uname_field;
{
register char *ptr;
+ static char Header[128];
- if (smpmode)
- ptr = smp_header + SMP_UNAME_START;
- else
- ptr = up_header + UP_UNAME_START;
+ snprintf(Header, sizeof(Header), smpmode ? smp_header : up_header,
+ namelength, namelength, uname_field);
- while (*uname_field != '\0')
- {
- *ptr++ = *uname_field++;
- }
+ cmdlength = 80 - strlen(Header) + 6;
- return(smpmode ? smp_header : up_header);
+ return Header;
}
static int swappgsin = -1;
@@ -586,6 +590,7 @@ char *(*get_userid)();
sprintf(fmt,
smpmode ? smp_Proc_format : up_Proc_format,
PP(pp, p_pid),
+ namelength, namelength,
(*get_userid)(EP(pp, e_pcred.p_ruid)),
PP(pp, p_priority) - PZERO,
PP(pp, p_nice) - NZERO,
@@ -596,6 +601,7 @@ char *(*get_userid)();
format_time(cputime),
10000.0 * weighted_cpu(pct, pp) / hz,
10000.0 * pct / hz,
+ cmdlength,
printable(PP(pp, p_comm)));
/* return the result */
OpenPOWER on IntegriCloud