summaryrefslogtreecommitdiffstats
path: root/bin/ps
diff options
context:
space:
mode:
authorgad <gad@FreeBSD.org>2004-06-23 23:48:09 +0000
committergad <gad@FreeBSD.org>2004-06-23 23:48:09 +0000
commit30666d1f0f431b581eeacc45735ff41d85d27c23 (patch)
tree42f4c0ba023a1c380ef10b9c78d4a46eb691734d /bin/ps
parent8ab36c09a858cbd52cbf9795162660a1ff1a423c (diff)
downloadFreeBSD-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.h2
-rw-r--r--bin/ps/keyword.c11
-rw-r--r--bin/ps/print.c26
-rw-r--r--bin/ps/ps.c14
-rw-r--r--bin/ps/ps.h4
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;
OpenPOWER on IntegriCloud