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
This commit is contained in:
parent
8ab36c09a8
commit
30666d1f0f
@ -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 *);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
14
bin/ps/ps.c
14
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)
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user