Commit 36a3646c authored by Zachary T Welch's avatar Zachary T Welch
Browse files

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.
parent 68785af4
......@@ -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 */
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment