Add macro for parsing numeric command arguments.

This helper eliminates significant amount of redundant code in command
handler functions throughout the system.  It wraps the lower-level
parse_* macros to implement a policy for reporting parse errors to the
active command context (cmd_ctx).  If errors do occur, this macro causes
the calling function to abort with the proper return code.
This commit is contained in:
Zachary T Welch 2009-10-22 07:44:54 -07:00
parent 68785af4da
commit 36a3646c22
1 changed files with 21 additions and 0 deletions

View File

@ -138,6 +138,27 @@ DECLARE_PARSE_WRAPPER(_s32, int32_t);
DECLARE_PARSE_WRAPPER(_s16, int16_t);
DECLARE_PARSE_WRAPPER(_s8, int8_t);
/**
* @brief parses the string @a in into @a out as a @a type, or prints
* a command error and passes the error code to the caller. If an error
* does occur, the calling function will return the error code produced
* by the parsing function (one of ERROR_COMMAND_ARGUMENT_*).
*
* This function may cause the calling function to return immediately,
* so it should be used carefully to avoid leaking resources. In most
* situations, parsing should be completed in full before proceding
* to allocate resources, and this strategy will most prevents leaks.
*/
#define COMMAND_PARSE_NUMBER(type, in, out) \
do { \
int retval = parse_##type(in, &(out)); \
if (ERROR_OK != retval) { \
command_print(cmd_ctx, stringify(out) \
" option value ('%s') is not valid", in); \
return retval; \
} \
} while (0)
void script_debug(Jim_Interp *interp, const char *cmd, int argc, Jim_Obj *const *argv);
#endif /* COMMAND_H */