From d72df5a18e0bb8bbcbf23df3e8591072f0cdb770 Mon Sep 17 00:00:00 2001 From: Michael Meffie Date: Tue, 11 Sep 2012 08:59:13 -0400 Subject: [PATCH] cmd: exit status zero from -help Return of an exit status of zero when running commands with -help, instead of returning an error. By general convention, and in previous versions, tools do not not treat -help as an error. The AFS::Command perl modules, use -help as an introspection technique, and fail when commands run with the -help option returns non-zero. Change-Id: I6ecd95f6ccd07218a2657dbb4dbf1c13599159f4 Reviewed-on: http://gerrit.openafs.org/8087 Reviewed-by: Derrick Brashear Reviewed-by: Simon Wilkinson Tested-by: BuildBot --- src/cmd/cmd.c | 8 ++++++-- src/cmd/cmd_errors.et | 1 + tests/cmd/command-t.c | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/cmd/cmd.c b/src/cmd/cmd.c index 1c5786e..6887454 100644 --- a/src/cmd/cmd.c +++ b/src/cmd/cmd.c @@ -1018,7 +1018,7 @@ cmd_Parse(int argc, char **argv, struct cmd_syndesc **outsyntax) /* Display full help syntax if we don't have subcommands */ if (noOpcodes) PrintFlagHelp(ts); - code = CMD_USAGE; + code = CMD_HELP; goto out; } @@ -1061,8 +1061,12 @@ cmd_Dispatch(int argc, char **argv) int code; code = cmd_Parse(argc, argv, &ts); - if (code) + if (code) { + if (code == CMD_HELP) { + code = 0; /* displaying help is not an error */ + } return code; + } /* * Before calling the beforeProc and afterProc and all the implications diff --git a/src/cmd/cmd_errors.et b/src/cmd/cmd_errors.et index dbc75e4..74b1894 100644 --- a/src/cmd/cmd_errors.et +++ b/src/cmd/cmd_errors.et @@ -20,4 +20,5 @@ error_table CMD ec CMD_TOOBIG, "Token too large" ec CMD_MISSING, "Option not specified on command line" ec CMD_BADFORMAT, "Improper format of configuration file" + ec CMD_HELP, "Help requested" end diff --git a/tests/cmd/command-t.c b/tests/cmd/command-t.c index b4718f3..0b0c83f 100644 --- a/tests/cmd/command-t.c +++ b/tests/cmd/command-t.c @@ -330,7 +330,7 @@ main(int argc, char **argv) code = cmd_ParseLine("-help", tv, &tc, 100); is_int(0, code, "cmd_ParseLine succeeds"); code = cmd_Parse(tc, tv, &retopts); - is_int(CMD_USAGE, code, "cmd_Parse returns usage error with help output"); + is_int(CMD_HELP, code, "cmd_Parse returns help indicator with help output"); ok(retopts == NULL, " ... and options is empty"); /* Check splitting with '=' */ -- 1.9.4