diff options
author | gad <gad@FreeBSD.org> | 2004-06-23 23:48:09 +0000 |
---|---|---|
committer | gad <gad@FreeBSD.org> | 2004-06-23 23:48:09 +0000 |
commit | 30666d1f0f431b581eeacc45735ff41d85d27c23 (patch) | |
tree | 42f4c0ba023a1c380ef10b9c78d4a46eb691734d /bin/ps | |
parent | 8ab36c09a858cbd52cbf9795162660a1ff1a423c (diff) | |
download | FreeBSD-src-30666d1f0f431b581eeacc45735ff41d85d27c23.zip FreeBSD-src-30666d1f0f431b581eeacc45735ff41d85d27c23.tar.gz |
Change "struct varent" to use the standard queue(8) macros, instead of
using it's own version of the same basic algorithm.
Submitted by: part by Cyrille Lefevre, part of it done by me
Diffstat (limited to 'bin/ps')
-rw-r--r-- | bin/ps/extern.h | 2 | ||||
-rw-r--r-- | bin/ps/keyword.c | 11 | ||||
-rw-r--r-- | bin/ps/print.c | 26 | ||||
-rw-r--r-- | bin/ps/ps.c | 14 | ||||
-rw-r--r-- | bin/ps/ps.h | 4 |
5 files changed, 25 insertions, 32 deletions
diff --git a/bin/ps/extern.h b/bin/ps/extern.h index 7e877f4..08b6d9b 100644 --- a/bin/ps/extern.h +++ b/bin/ps/extern.h @@ -40,7 +40,7 @@ extern int cflag, eval, fscale, nlistread, rawcpu; extern unsigned long mempages; extern time_t now; extern int sumrusage, termwidth, totwidth; -extern VARENT *vhead; +extern STAILQ_HEAD(velisthead, varent) varlist; __BEGIN_DECLS void arguments(KINFO *, VARENT *); diff --git a/bin/ps/keyword.c b/bin/ps/keyword.c index 8a1726a..60e9e2e 100644 --- a/bin/ps/keyword.c +++ b/bin/ps/keyword.c @@ -235,7 +235,6 @@ showkey(void) void parsefmt(const char *p, int user) { - static struct varent *vtail; char *tempstr, *tempstr1; #define FMTSEP " \t,\n" @@ -282,16 +281,10 @@ parsefmt(const char *p, int user) if (vent->var == NULL) errx(1, "malloc failed"); memcpy(vent->var, v, sizeof(*vent->var)); - vent->next = NULL; - if (vhead == NULL) - vhead = vtail = vent; - else { - vtail->next = vent; - vtail = vent; - } + STAILQ_INSERT_TAIL(&varlist, vent, next_ve); } free(tempstr1); - if (!vhead) { + if (STAILQ_EMPTY(&varlist)) { warnx("no valid keywords; valid keywords:"); showkey(); exit(1); diff --git a/bin/ps/print.c b/bin/ps/print.c index da8f2e0..00394fc 100644 --- a/bin/ps/print.c +++ b/bin/ps/print.c @@ -69,26 +69,23 @@ printheader(void) { VAR *v; struct varent *vent; - int allempty; - allempty = 1; - for (vent = vhead; vent; vent = vent->next) - if (*vent->header != '\0') { - allempty = 0; + STAILQ_FOREACH(vent, &varlist, next_ve) + if (*vent->header != '\0') break; - } - if (allempty) + if (!vent) return; - for (vent = vhead; vent; vent = vent->next) { + + STAILQ_FOREACH(vent, &varlist, next_ve) { v = vent->var; if (v->flag & LJUST) { - if (vent->next == NULL) /* last one */ + if (STAILQ_NEXT(vent, next_ve) == NULL) /* last one */ (void)printf("%s", vent->header); else (void)printf("%-*s", v->width, vent->header); } else (void)printf("%*s", v->width, vent->header); - if (vent->next != NULL) + if (STAILQ_NEXT(vent, next_ve) != NULL) (void)putchar(' '); } (void)putchar('\n'); @@ -105,7 +102,7 @@ arguments(KINFO *k, VARENT *ve) if ((vis_args = malloc(strlen(k->ki_args) * 4 + 1)) == NULL) errx(1, "malloc failed"); strvis(vis_args, k->ki_args, VIS_TAB | VIS_NL | VIS_NOSLASH); - if (ve->next == NULL) { + if (STAILQ_NEXT(ve, next_ve) == NULL) { /* last field */ if (termwidth == UNLIMITED) { (void)printf("%s", vis_args); @@ -131,7 +128,8 @@ command(KINFO *k, VARENT *ve) v = ve->var; if (cflag) { - if (ve->next == NULL) /* last field, don't pad */ + /* If it is the last field, then don't pad */ + if (STAILQ_NEXT(ve, next_ve) == NULL) (void)printf("%s", k->ki_p->ki_comm); else (void)printf("%-*s", v->width, k->ki_p->ki_comm); @@ -147,7 +145,7 @@ command(KINFO *k, VARENT *ve) } else vis_env = NULL; - if (ve->next == NULL) { + if (STAILQ_NEXT(ve, next_ve) == NULL) { /* last field */ if (termwidth == UNLIMITED) { if (vis_env) @@ -180,7 +178,7 @@ ucomm(KINFO *k, VARENT *ve) VAR *v; v = ve->var; - if (ve->next == NULL) /* last field, don't pad */ + if (STAILQ_NEXT(ve, next_ve) == NULL) /* last field, don't pad */ (void)printf("%s", k->ki_p->ki_comm); else (void)printf("%-*s", v->width, k->ki_p->ki_comm); diff --git a/bin/ps/ps.c b/bin/ps/ps.c index f4b0208..7d09131 100644 --- a/bin/ps/ps.c +++ b/bin/ps/ps.c @@ -98,7 +98,7 @@ int sumrusage; /* -S */ int termwidth; /* Width of the screen (0 == infinity). */ int totwidth; /* Calculated-width of requested variables. */ -struct varent *vhead; +struct velisthead varlist = STAILQ_HEAD_INITIALIZER(varlist); static int forceuread = DEF_UREAD; /* Do extra work to get u-area. */ static kvm_t *kd; @@ -600,9 +600,9 @@ main(int argc, char *argv[]) * For each process, call each variable output function. */ for (i = lineno = 0; i < nkept; i++) { - for (vent = vhead; vent; vent = vent->next) { + STAILQ_FOREACH(vent, &varlist, next_ve) { (vent->var->oproc)(&kinfo[i], vent); - if (vent->next != NULL) + if (STAILQ_NEXT(vent, next_ve) != NULL) (void)putchar(' '); } (void)putchar('\n'); @@ -886,7 +886,7 @@ find_varentry(VAR *v) { struct varent *vent; - for (vent = vhead; vent; vent = vent->next) { + STAILQ_FOREACH(vent, &varlist, next_ve) { if (strcmp(vent->var->name, v->name) == 0) return vent; } @@ -899,7 +899,7 @@ scanvars(void) struct varent *vent; VAR *v; - for (vent = vhead; vent; vent = vent->next) { + STAILQ_FOREACH(vent, &varlist, next_ve) { v = vent->var; if (v->flag & DSIZ) { v->dwidth = v->width; @@ -919,7 +919,7 @@ dynsizevars(KINFO *ki) VAR *v; int i; - for (vent = vhead; vent; vent = vent->next) { + STAILQ_FOREACH(vent, &varlist, next_ve) { v = vent->var; if (!(v->flag & DSIZ)) continue; @@ -938,7 +938,7 @@ sizevars(void) VAR *v; int i; - for (vent = vhead; vent; vent = vent->next) { + STAILQ_FOREACH(vent, &varlist, next_ve) { v = vent->var; i = strlen(vent->header); if (v->width < i) diff --git a/bin/ps/ps.h b/bin/ps/ps.h index 817719d..03adc0a 100644 --- a/bin/ps/ps.h +++ b/bin/ps/ps.h @@ -30,6 +30,8 @@ * $FreeBSD$ */ +#include <sys/queue.h> + #define UNLIMITED 0 /* unlimited terminal width */ enum type { CHAR, UCHAR, SHORT, USHORT, INT, UINT, LONG, ULONG, KPTR, PGTOK }; @@ -44,8 +46,8 @@ typedef struct kinfo { /* Variables. */ typedef struct varent { + STAILQ_ENTRY(varent) next_ve; const char *header; - struct varent *next; struct var *var; } VARENT; |