size_t cmdlen;
int ambig;
int best;
+ struct cmd_item *alias;
/* Allow --long-style options. */
if (aname[0] == '-' && aname[1] == '-' && aname[2] && aname[3]) {
return i;
if (strlen(as->parms[i].name) < cmdlen)
continue;
+
+ /* Check for aliases, which must be full matches */
+ alias = as->parms[i].aliases;
+ while (alias != NULL) {
+ if (strcmp(alias->data, aname) == 0)
+ return i;
+ alias = alias->next;
+ }
+
/* A hidden option must be a full match (no best matches) */
if (as->parms[i].flags & CMD_HIDE || !enableAbbreviation)
continue;
} else
tp->help = NULL;
+ tp->aliases = NULL;
+
if (as->nParms <= ref)
as->nParms = ref+1;
return cmd_AddParmAtOffset(as, aname, atype, aflags, ahelp, as->nParms++);
}
+int
+cmd_AddParmAlias(struct cmd_syndesc *as, int pos, char *alias)
+{
+ struct cmd_item *item;
+
+ if (pos > as->nParms)
+ return CMD_EXCESSPARMS;
+
+ item = calloc(1, sizeof(struct cmd_item));
+ item->data = strdup(alias);
+ item->next = as->parms[pos].aliases;
+ as->parms[pos].aliases = item;
+
+ return 0;
+}
+
/* add a text item to the end of the parameter list */
static int
AddItem(struct cmd_parmdesc *aparm, char *aval)
struct cmd_item *items; /* list of cmd items */
afs_int32 flags; /* flags */
char *help; /* optional help descr */
+ struct cmd_item *aliases; /* optional aliases */
};
/* cmd_parmdesc flags */
afs_int32 aflags, char *ahelp);
extern int cmd_AddParmAtOffset(struct cmd_syndesc *as, char *name, int atype,
afs_int32 aflags, char *ahelp, int ref);
+extern int cmd_AddParmAlias(struct cmd_syndesc *as, int pos, char *alias);
extern int cmd_Dispatch(int argc, char **argv);
extern int cmd_FreeArgv(char **argv);
extern int cmd_ParseLine(char *aline, char **argv, afs_int32 * an,
int retval;
char *retstring;
- plan(58);
+ plan(62);
initialize_CMD_error_table();
cmd_FreeOptions(&retopts);
cmd_FreeArgv(tv);
+ /* Add an alias */
+ code = cmd_AddParmAlias(opts, 1, "-twa");
+ is_int(0, code, "cmd_AddParmAlias succeeds");
+
+ code = cmd_ParseLine("-first 1 -twa tup", tv, &tc, 100);
+ is_int(0, code, "cmd_ParseLine succeeds");
+ code = cmd_Parse(tc, tv, &retopts);
+ is_int(0, code, "cmd_Parse succeeds for alias");
+ cmd_OptionAsString(retopts, 1, &retstring);
+ is_string("tup", retstring, " ... and we have the correct value");
+ free(retstring);
+ retstring = NULL;
+
+ cmd_FreeOptions(&retopts);
+ cmd_FreeArgv(tv);
return 0;
}