diff --git a/bin/ps/keyword.c b/bin/ps/keyword.c index 17cdc780d04..e27a09d538c 100644 --- a/bin/ps/keyword.c +++ b/bin/ps/keyword.c @@ -240,6 +240,7 @@ parsefmt(const char *p) static struct varent *vtail; char *tempstr, *tempstr1; +#define FMTSEP " \t,\n" tempstr1 = tempstr = strdup(p); while (tempstr && *tempstr) { char *cp; @@ -247,10 +248,18 @@ parsefmt(const char *p) struct varent *vent; /* - * Seperate the format by commas. + * If an item contains an equals sign, it specifies a column + * header, may contain embedded separator characters and + * is always the last item. */ - while ((cp = strsep(&tempstr, ",")) != NULL && *cp == '\0') - /* void */; + if (tempstr[strcspn(tempstr, "="FMTSEP)] != '=') + while ((cp = strsep(&tempstr, FMTSEP)) != NULL && + *cp == '\0') + /* void */; + else { + cp = tempstr; + tempstr = NULL; + } if (cp == NULL || !(v = findvar(cp))) continue; if ((vent = malloc(sizeof(struct varent))) == NULL) diff --git a/bin/ps/ps.1 b/bin/ps/ps.1 index dca9055c359..bfccf6e7971 100644 --- a/bin/ps/ps.1 +++ b/bin/ps/ps.1 @@ -130,8 +130,8 @@ Keywords may be appended with an equals (``='') sign and a string. This causes the printed header to use the specified string instead of the standard header. .It Fl o -Display information associated with the comma separated list of keywords -specified. +Display information associated with the space or comma separated +list of keywords specified. Multiple keywords may also be given in the form of more than one .Fl o option.