]> git.sur5r.net Git - openocd/commitdiff
Add macro for parsing numeric command arguments.
authorZachary T Welch <zw@superlucidity.net>
Thu, 22 Oct 2009 14:44:54 +0000 (07:44 -0700)
committerZachary T Welch <zw@superlucidity.net>
Fri, 6 Nov 2009 01:27:25 +0000 (17:27 -0800)
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.

src/helper/command.h

index ba825bcb48485a9e61d22efc0cd943b6908ffb57..2d0142fd743b2fb63519b2575e8880406104d163 100644 (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 */