From 8c23dfdcd4d2abeb4ca8f5a20cae043c3c4ae60e Mon Sep 17 00:00:00 2001 From: Jim Warner Date: Wed, 8 Sep 2021 00:00:00 -0500 Subject: [PATCH] top: some minor tweaks supporting long cmdline options This darn patch began as 1 correction to an extraneous comma in the man document. Then, it grew to include an adjustment for a couple of additional man page things. After that, I figured I might as well tighten up logic dealing with those awful gaps in the getopt_long code. [ the error_exit mentioned in the associated comment ] [ will only be taken when '=' ends the argv vectors! ] Signed-off-by: Jim Warner --- top/top.1 | 9 +++++---- top/top.c | 6 ++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/top/top.1 b/top/top.1 index f3cfe296..91d8f92c 100644 --- a/top/top.1 +++ b/top/top.1 @@ -295,8 +295,9 @@ as scalable columns and discussed under topic `3a. DESCRIPTIONS of Fields'. .\" ---------------------------------------------------------------------- Mandatory\fI arguments\fR to long options are mandatory for short options too. -The equals sign can be used with either option form and whitespace -before and/or after the `=' is permitted. + +Although not required, the equals sign can be used with either option +form and whitespace before and/or after the `=' is permitted. .TP 3 \-\fBb\fR, \fB\-\-batch\fR @@ -448,7 +449,7 @@ The `p', `U' and `u' \*(COs are mutually exclusive. .TP 3 \-\fBV\fR, \fB\-\-version\fR -Show library version, then quit. +Display version information, then quit. .TP 3 \-\fBw\fR, \fB\-\-width\fR [=\fICOLUMNS\fR] @@ -462,7 +463,7 @@ In normal display mode, when used without an argument \*(We will\fI attempt\fR to format output using the COLUMNS= and LINES= environment variables, if set. With an argument, output width can only be decreased, not increased. Whether using environment variables or an argument with \-w, when\fI not\fR -in Batch mode actual, terminal dimensions can never be exceeded. +in Batch mode actual terminal dimensions can never be exceeded. \*(NT Without the use of this \*(CO, output width is always based on the terminal at which \*(We was invoked whether or not in Batch mode. diff --git a/top/top.c b/top/top.c index 4e2ab70b..0e3614a0 100644 --- a/top/top.c +++ b/top/top.c @@ -3829,8 +3829,10 @@ static void parse_args (int argc, char **argv) { cp = argv[optind++]; if (cp) { if (*cp == '=') ++cp; - if (*cp == '\0' && optind < argc) cp = argv[optind++]; - if (!cp || *cp == '\0') error_exit(fmtmk(N_fmt(MISSING_args_fmt), ch)); + /* here, if we're actually accessing argv[argc], we'll rely on + the required NULL delimiter which yields an error_exit next */ + if (*cp == '\0') cp = argv[optind++]; + if (!cp) error_exit(fmtmk(N_fmt(MISSING_args_fmt), ch)); } #endif switch (ch) {