}
}
}
+
+int
+cmd_OptionAsInt(struct cmd_syndesc *syn, int pos, int *value)
+{
+ if (pos > syn->nParms)
+ return CMD_EXCESSPARMS;
+ if (syn->parms[pos].items == NULL ||
+ syn->parms[pos].items->data == NULL)
+ return CMD_MISSING;
+ *value = strtol(syn->parms[pos].items->data, NULL, 10);
+
+ return 0;
+}
+
+int
+cmd_OptionAsString(struct cmd_syndesc *syn, int pos, char **value)
+{
+ if (pos > syn->nParms)
+ return CMD_EXCESSPARMS;
+ if (syn->parms[pos].items == NULL || syn->parms[pos].items->data == NULL)
+ return CMD_MISSING;
+
+ if (*value)
+ free(*value);
+ *value = strdup(syn->parms[pos].items->data);
+
+ return 0;
+}
+
+int
+cmd_OptionAsList(struct cmd_syndesc *syn, int pos, struct cmd_item **value)
+{
+ if (pos > syn->nParms)
+ return CMD_EXCESSPARMS;
+ if (syn->parms[pos].items == NULL)
+ return CMD_MISSING;
+
+ *value = syn->parms[pos].items;
+ return 0;
+}
+
+int
+cmd_OptionAsFlag(struct cmd_syndesc *syn, int pos, int *value)
+{
+ if (pos > syn->nParms)
+ return CMD_EXCESSPARMS;
+ if (syn->parms[pos].items == NULL)
+ return CMD_MISSING;
+
+ *value = 1;
+ return 0;
+}
+
+int
+cmd_OptionPresent(struct cmd_syndesc *syn, int pos)
+{
+ if (pos > syn->nParms || syn->parms[pos].items == NULL)
+ return 0;
+
+ return 1;
+}
extern int cmd_Parse(int argc, char **argv, struct cmd_syndesc **outsyntax);
extern void cmd_FreeOptions(struct cmd_syndesc **ts);
+extern int cmd_OptionAsInt(struct cmd_syndesc *syn, int pos, int *value);
+extern int cmd_OptionAsString(struct cmd_syndesc *syn, int pos, char **value);
+extern int cmd_OptionAsList(struct cmd_syndesc *syn, int pos, struct cmd_item **);
+extern int cmd_OptionAsFlag(struct cmd_syndesc *syn, int pos, int *value);
+extern int cmd_OptionPresent(struct cmd_syndesc *syn, int pos);
#endif /* __CMD_INCL__ */
ec CMD_AMBIG, "<unused>"
ec CMD_TOOFEW, "Insufficient required parameters provided"
ec CMD_TOOBIG, "Token too large"
+ ec CMD_MISSING, "Option not specified on command line"
end
struct cmd_syndesc *retopts;
int code;
int tc;
+ int retval;
+ char *retstring;
- plan(51);
+ plan(58);
initialize_CMD_error_table();
cmd_FreeOptions(&retopts);
cmd_FreeArgv(tv);
+ /* Check Accessors */
+ code = cmd_ParseLine("-first 1 -second second -flag", tv, &tc, 100);
+ is_int(0, code, "cmd_ParseLine succeeds");
+ code = cmd_Parse(tc, tv, &retopts);
+
+ code = cmd_OptionAsInt(retopts, 0, &retval);
+ is_int(0, code, "cmd_OptionsAsInt succeeds");
+ is_int(1, retval, " ... and returns correct value");
+
+ code = cmd_OptionAsString(retopts, 1, &retstring);
+ is_int(0, code, "cmd_OptionsAsString succeeds");
+ is_string("second", retstring, " ... and returns correct value");
+ free(retstring);
+ retstring = NULL;
+
+ code = cmd_OptionAsFlag(retopts, 2, &retval);
+ is_int(0, code, "cmd_OptionsAsFlag succeeds");
+ ok(retval, " ... and flag is correct");
+
+ cmd_FreeOptions(&retopts);
+ cmd_FreeArgv(tv);
+
+
return 0;
}