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(_s16, int16_t);
|
||||||
DECLARE_PARSE_WRAPPER(_s8, int8_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);
|
void script_debug(Jim_Interp *interp, const char *cmd, int argc, Jim_Obj *const *argv);
|
||||||
|
|
||||||
#endif /* COMMAND_H */
|
#endif /* COMMAND_H */
|
||||||
|
|
Loading…
Reference in New Issue