On Wednesday 18 November 2009, Zachary T Welch wrote: > Adds several macros similar to COMMAND_PARSE_NUMBER, but for parsing > boolean command arguments. Two flavors are provided to provide > drop-in compatibility with existing code, allow for the elimination > of a lot of code bloat while improving the error checking and reporting. > > COMMAND_PARSE_ON_OFF parses "on"/"off" command parameters. > COMMAND_PARSE_ON_OFF parses "enable"/"disable" command parameters.
Same function, different behavior? Or cut/paste error? :) It's actually fairly common to have "bool" parsing code handle multiple variants, and I suggest you do that here instead of defining "friends". Variants could be: different case (call strcasecmp), numeric mode (0/1), on/off, enable/disable, true/false, yes/no. It gets annoying to need to recall which variant of true/false a given routine needs. :) > > Both print the error and return an error out of the calling function. > > Signed-off-by: Zachary T Welch <[email protected]> > --- > src/helper/command.h | 28 ++++++++++++++++++++++++++++ > 1 files changed, 28 insertions(+), 0 deletions(-) > > diff --git a/src/helper/command.h b/src/helper/command.h > index 05088b5..9f2d971 100644 > --- a/src/helper/command.h > +++ b/src/helper/command.h > @@ -263,6 +263,34 @@ DECLARE_PARSE_WRAPPER(_s8, int8_t); > } \ > } while (0) > > +/** > + * Parse the string @c as a binary parameter, storing the boolean value > + * in @c out. The strings @c on and @c off are used to match different > + * strings for true and false options (e.g. "on" and "off" or > + * "enable" and "disable"). > + */ > +#define COMMAND_PARSE_BOOL(in, out, on, off) \ This is quite large for an inline. Better as a function. Especially if you do a way with the "friends"... > + do { \ > + if (strcmp(in, on) == 0) \ > + out = true; \ > + else if (strcmp(in, off) == 0) \ > + out = false; \ > + else { \ > + command_print(CMD_CTX, stringify(out) \ > + " option value ('%s') is not valid", in); \ > + command_print(CMD_CTX, " choices are '%s' or '%s'", \ > + on, off); \ > + return ERROR_COMMAND_SYNTAX_ERROR; \ > + } \ > + } while (0) > + > +/// parses an on/off command argument > +#define COMMAND_PARSE_ON_OFF(in, out) \ > + COMMAND_PARSE_BOOL(in, out, "on", "off") > +/// parses an enable/disable command argument > +#define COMMAND_PARSE_ENABLE(in, out) \ > + COMMAND_PARSE_BOOL(in, out, "enable", "disable") > + > void script_debug(Jim_Interp *interp, const char *cmd, > unsigned argc, Jim_Obj *const *argv); > > -- > 1.6.4.4 > > _______________________________________________ > Openocd-development mailing list > [email protected] > https://lists.berlios.de/mailman/listinfo/openocd-development > > _______________________________________________ Openocd-development mailing list [email protected] https://lists.berlios.de/mailman/listinfo/openocd-development
