diff options
author | Zachary T Welch <zw@superlucidity.net> | 2009-10-22 07:44:54 -0700 |
---|---|---|
committer | Zachary T Welch <zw@superlucidity.net> | 2009-11-05 17:27:25 -0800 |
commit | 36a3646c2205474345482188c8c05e50d1f67e44 (patch) | |
tree | 28e687c4ef383f98be76467ed6e5a86dbaa00e74 | |
parent | 68785af4da7727238c86dcf8858e0b5975bc988e (diff) | |
download | riscv-openocd-36a3646c2205474345482188c8c05e50d1f67e44.zip riscv-openocd-36a3646c2205474345482188c8c05e50d1f67e44.tar.gz riscv-openocd-36a3646c2205474345482188c8c05e50d1f67e44.tar.bz2 |
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.
-rw-r--r-- | src/helper/command.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/helper/command.h b/src/helper/command.h index ba825bc..2d0142f 100644 --- a/src/helper/command.h +++ b/src/helper/command.h @@ -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 */ |