src/helper: wrap and clean headers.
[openocd.git] / src / helper / command.h
index c574efd507e2f03511e4b84e1c46f4cc5a4a604f..70b00c3292de41b8b7bd3152e348227a6bc528e6 100644 (file)
 #include "jim.h"
 #endif
 
-/* To achieve C99 printf compatibility in MinGW, gnu_printf should */
-/* be used for __attribute__((format( ... )))                      */
-#ifdef IS_MINGW
+/* To achieve C99 printf compatibility in MinGW, gnu_printf should be
+ * used for __attribute__((format( ... ))), with GCC v4.4 or later
+ */
+#if (defined(IS_MINGW) && (((__GNUC__ << 16) + __GNUC_MINOR__) >= 0x00040004))
 #define PRINTF_ATTRIBUTE_FORMAT gnu_printf
 #else
 #define PRINTF_ATTRIBUTE_FORMAT printf
@@ -83,25 +84,36 @@ typedef struct command_s
        struct command_s *next;
 } command_t;
 
-extern command_t* register_command(command_context_t *context, command_t *parent, char *name, int (*handler)(struct command_context_s *context, char* name, char** args, int argc), enum command_mode mode, char *help);
-extern int unregister_command(command_context_t *context, char *name);
-extern int unregister_all_commands(command_context_t *context);
-extern void command_set_output_handler(command_context_t* context, int (*output_handler)(struct command_context_s *context, const char* line), void *priv);
-extern command_context_t* copy_command_context(command_context_t* context);
-extern int command_context_mode(command_context_t *context, enum command_mode mode);
-extern command_context_t* command_init(void);
-extern int command_done(command_context_t *context);
+command_t* register_command(command_context_t *context,
+               command_t *parent, char *name,
+               int (*handler)(struct command_context_s *context,
+                               char* name, char** args, int argc),
+               enum command_mode mode, char *help);
 
-extern void command_print(command_context_t *context, const char *format, ...)
+int unregister_command(command_context_t *context, char *name);
+int unregister_all_commands(command_context_t *context);
+
+void command_set_output_handler(command_context_t* context,
+               int (*output_handler)(struct command_context_s *context,
+               const char* line), void *priv);
+
+command_context_t* copy_command_context(command_context_t* context);
+
+int command_context_mode(command_context_t *context, enum command_mode mode);
+
+command_context_t* command_init(void);
+int command_done(command_context_t *context);
+
+void command_print(command_context_t *context, const char *format, ...)
                __attribute__ ((format (PRINTF_ATTRIBUTE_FORMAT, 2, 3)));
-extern void command_print_sameline(command_context_t *context, const char *format, ...)
+void command_print_sameline(command_context_t *context, const char *format, ...)
                __attribute__ ((format (PRINTF_ATTRIBUTE_FORMAT, 2, 3)));
-extern int command_run_line(command_context_t *context, char *line);
-extern int command_run_linef(command_context_t *context, const char *format, ...)
+int command_run_line(command_context_t *context, char *line);
+int command_run_linef(command_context_t *context, const char *format, ...)
                __attribute__ ((format (PRINTF_ATTRIBUTE_FORMAT, 2, 3)));
-extern void command_output_text(command_context_t *context, const char *data);
+void command_output_text(command_context_t *context, const char *data);
 
-extern void process_jim_events(void);
+void process_jim_events(void);
 
 #define                ERROR_COMMAND_CLOSE_CONNECTION          (-600)
 #define                ERROR_COMMAND_SYNTAX_ERROR                      (-601)
@@ -137,6 +149,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 */

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)