More MinGW C99 printf compliance
authorRedirect 'Slash' NIL <redirect.slash.nil@gmail.com>
Sun, 18 Oct 2009 00:47:52 +0000 (17:47 -0700)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Sun, 18 Oct 2009 00:47:52 +0000 (17:47 -0700)
Passing "--std=gun99" is unfortunately not sufficient to make current
MinGW compilers conform with respect to checking printf format strings.
(The C runtime seems not to have problems.)

Fix by using a "gnu_printf" format specifier not "printf".

src/helper/command.h
src/helper/log.h
src/target/arm11.h

index 2b9f1a16230ba7750594defb0063aee246f96b81..c574efd507e2f03511e4b84e1c46f4cc5a4a604f 100644 (file)
 #include "jim.h"
 #endif
 
+/* To achieve C99 printf compatibility in MinGW, gnu_printf should */
+/* be used for __attribute__((format( ... )))                      */
+#ifdef IS_MINGW
+#define PRINTF_ATTRIBUTE_FORMAT gnu_printf
+#else
+#define PRINTF_ATTRIBUTE_FORMAT printf
+#endif
+
 enum command_mode
 {
        COMMAND_EXEC,
@@ -85,12 +93,12 @@ extern command_context_t* command_init(void);
 extern int command_done(command_context_t *context);
 
 extern void command_print(command_context_t *context, const char *format, ...)
-               __attribute__ ((format (printf, 2, 3)));
+               __attribute__ ((format (PRINTF_ATTRIBUTE_FORMAT, 2, 3)));
 extern void command_print_sameline(command_context_t *context, const char *format, ...)
-               __attribute__ ((format (printf, 2, 3)));
+               __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, ...)
-               __attribute__ ((format (printf, 2, 3)));
+               __attribute__ ((format (PRINTF_ATTRIBUTE_FORMAT, 2, 3)));
 extern void command_output_text(command_context_t *context, const char *data);
 
 extern void process_jim_events(void);
index 7fc5a886e84bc3d8ee5464ecc2cf6f64f44520dd..8f6ac7706d365afd1c01a73e7187d71d5ae02cc9 100644 (file)
 
 #include "command.h"
 
+/* To achieve C99 printf compatibility in MinGW, gnu_printf should */
+/* be used for __attribute__((format( ... )))                      */
+#ifdef IS_MINGW
+#define PRINTF_ATTRIBUTE_FORMAT gnu_printf
+#else
+#define PRINTF_ATTRIBUTE_FORMAT printf
+#endif
+
 /* logging priorities
  * LOG_LVL_SILENT - turn off all output. In lieu of try + catch this can be used as a
  *                  feeble ersatz.
@@ -52,10 +60,10 @@ enum log_levels
 
 extern void log_printf(enum log_levels level, const char *file, int line,
        const char *function, const char *format, ...)
-__attribute__ ((format (printf, 5, 6)));
+__attribute__ ((format (PRINTF_ATTRIBUTE_FORMAT, 5, 6)));
 extern void log_printf_lf(enum log_levels level, const char *file, int line,
        const char *function, const char *format, ...)
-__attribute__ ((format (printf, 5, 6)));
+__attribute__ ((format (PRINTF_ATTRIBUTE_FORMAT, 5, 6)));
 extern int log_register_commands(struct command_context_s *cmd_ctx);
 extern int log_init(struct command_context_s *cmd_ctx);
 extern int set_log_output(struct command_context_s *cmd_ctx, FILE *output);
index 61c5f7f9b126890b9a18103517f2de622372a838..9afff23d7ce6be7a3775877cef12cf0794dee8df 100644 (file)
@@ -33,8 +33,9 @@
        type * variable = calloc(1, sizeof(type) * items)
 
 /* For MinGW use 'I' prefix to print size_t (instead of 'z') */
+/* Except if __USE_MINGW_ANSI_STDIO is defined with MinGW    */
 
-#ifndef __MSVCRT__
+#if (!defined(__MSVCRT__) || defined(__USE_MINGW_ANSI_STDIO))
 #define ZU             "%zu"
 #else
 #define ZU             "%Iu"

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)