From 898d84cefe4b0bf54cc77ccca998e596710a1ee6 Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Mon, 18 Apr 2011 08:31:42 +0100 Subject: [PATCH] cmd: Add an option to disable abbreviations Add an option to completely disable the matching of abbreviations when parsing command line options. Change-Id: Ic3babf584c21f389503c9c69670d400d54a6f4a6 Reviewed-on: http://gerrit.openafs.org/4540 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- src/cmd/cmd.c | 9 ++++++++- src/cmd/cmd.p.h | 1 + tests/cmd/command-t.c | 10 +++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/cmd/cmd.c b/src/cmd/cmd.c index 829d725..087e05c 100644 --- a/src/cmd/cmd.c +++ b/src/cmd/cmd.c @@ -29,6 +29,7 @@ static int noOpcodes = 0; static int (*beforeProc) (struct cmd_syndesc * ts, void *beforeRock) = NULL; static int (*afterProc) (struct cmd_syndesc * ts, void *afterRock) = NULL; static int enablePositional = 1; +static int enableAbbreviation = 1; static void *beforeRock, *afterRock; static char initcmd_opcode[] = "initcmd"; /*Name of initcmd opcode */ @@ -91,7 +92,7 @@ FindType(struct cmd_syndesc *as, char *aname) if (strlen(as->parms[i].name) < cmdlen) continue; /* A hidden option must be a full match (no best matches) */ - if (as->parms[i].flags & CMD_HIDE) + if (as->parms[i].flags & CMD_HIDE || !enableAbbreviation) continue; if (strncmp(as->parms[i].name, aname, cmdlen) == 0) { @@ -459,6 +460,12 @@ cmd_DisablePositionalCommands(void) enablePositional = 0; } +void +cmd_DisableAbbreviations(void) +{ + enableAbbreviation = 0; +} + int cmd_IsAdministratorCommand(struct cmd_syndesc *as) { diff --git a/src/cmd/cmd.p.h b/src/cmd/cmd.p.h index b761230..3fdd5e2 100644 --- a/src/cmd/cmd.p.h +++ b/src/cmd/cmd.p.h @@ -78,6 +78,7 @@ extern int cmd_ParseLine(char *aline, char **argv, afs_int32 * an, afs_int32 amaxn); extern int cmd_IsAdministratorCommand(struct cmd_syndesc *as); extern void cmd_DisablePositionalCommands(void); +extern void cmd_DisableAbbreviations(void); extern void PrintSyntax(struct cmd_syndesc *as); extern void PrintFlagHelp(struct cmd_syndesc *as); diff --git a/tests/cmd/command-t.c b/tests/cmd/command-t.c index 74623d0..c69d38e 100644 --- a/tests/cmd/command-t.c +++ b/tests/cmd/command-t.c @@ -56,7 +56,7 @@ main(int argc, char **argv) int code; int tc; - plan(27); + plan(29); initialize_CMD_error_table(); @@ -128,6 +128,14 @@ main(int argc, char **argv) is_int(3359746, code, "positional parameters can be disabled"); cmd_FreeArgv(tv); + /* Disable abbreviations */ + cmd_DisableAbbreviations(); + code = cmd_ParseLine("-fi foo -s bar -flag", tv, &tc, 100); + is_int(0, code, "cmd_ParseLine succeeds"); + code = cmd_Dispatch(tc, tv); + is_int(CMD_UNKNOWNSWITCH, code, "dispatching abbreviations succeeds"); + cmd_FreeArgv(tv); + return 0; } -- 1.7.1