* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
- * %sccs.include.redist.c%
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
*/
#ifndef lint
-static char sccsid[] = "@(#)keyword.c 5.5 (Berkeley) %G%";
+static char sccsid[] = "@(#)keyword.c 5.9 (Berkeley) 6/3/91";
#endif /* not lint */
#include <sys/param.h>
#include <sys/proc.h>
#include <errno.h>
#include <stdio.h>
+#include <stdlib.h>
#include <stddef.h>
#include <string.h>
#include "ps.h"
{"pgid", "PGID", NULL, 0, evar, PIDLEN, EOFF(e_pgid), USHORT, PIDFMT},
{"pid", "PID", NULL, 0, pvar, PIDLEN, POFF(p_pid),SHORT, PIDFMT},
{"pmem", "", "%mem"},
- {"ppid", "PPID", NULL, 0, pvar, PIDLEN, POFF(p_ppid), SHORT, PIDFMT},
+ {"ppid", "PPID", NULL, 0, evar, PIDLEN, EOFF(e_ppid), SHORT, PIDFMT},
{"pri", "PRI", NULL, 0, pri, 3},
{"re", "RE", NULL, 0, pvar, 3, POFF(p_time), CHAR, "d"},
{"rgid", "RGID", NULL, 0, evar, UIDLEN, EOFF(e_pcred.p_rgid),
register char *p, *sep;
i = 0;
+ sep = "";
for (v = var; *(p = v->name); ++v) {
len = strlen(p);
if (termwidth && (i += len + 1) > termwidth) {
i = len;
sep = "\n";
- } else
- sep = " ";
+ }
(void) printf("%s%s", sep, p);
+ sep = " ";
}
(void) printf("\n");
}
parsefmt(p)
char *p;
{
+ static struct varent *vtail;
register VAR *v;
register char *cp;
register struct varent *vent;
static VAR *findvar();
#define FMTSEP " \t,\n"
- while (p) {
+ while (p && *p) {
while ((cp = strsep(&p, FMTSEP)) != NULL && *cp == '\0')
/* void */;
if (!(v = findvar(cp)))
continue;
- if ((vent = (struct varent *)malloc(sizeof(struct varent))) ==
- NULL) {
- (void)fprintf(stderr, "ps: no space\n");
- exit(1);
- }
+ if ((vent = malloc(sizeof(struct varent))) == NULL)
+ err("%s", strerror(errno));
vent->var = v;
vent->next = NULL;
if (vhead == NULL)
vtail = vent;
}
}
- if (!vhead) {
- (void)fprintf(stderr, "ps: no valid keywords\n");
- exit(1);
- }
+ if (!vhead)
+ err("no valid keywords\n");
}
static VAR *