cmd: Add an option to disable abbreviations
authorSimon Wilkinson <sxw@your-file-system.com>
Mon, 18 Apr 2011 07:31:42 +0000 (08:31 +0100)
committerDerrick Brashear <shadow@dementia.org>
Tue, 26 Apr 2011 04:52:10 +0000 (21:52 -0700)
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 <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

src/cmd/cmd.c
src/cmd/cmd.p.h
tests/cmd/command-t.c

index 829d725..087e05c 100644 (file)
@@ -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)
 {
index b761230..3fdd5e2 100644 (file)
@@ -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);
 
index 74623d0..c69d38e 100644 (file)
@@ -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;
 }