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:
parent
68785af4da
commit
36a3646c22
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue