Hi

This lets GCC warn us about printf errors with the wrapped printf calls too. 
And lo and behold, with this patch we have about a dozen new warnings :)

- Lauri
>From 5a98f65c13861dcd4ebc785c268261ed1ca5d7b6 Mon Sep 17 00:00:00 2001
From: Lauri Kasanen <[email protected]>
Date: Thu, 7 Jun 2012 22:33:33 +0300
Subject: [PATCH] headers: Enable printf warnings for the wrapped printf 
functions


Signed-off-by: Lauri Kasanen <[email protected]>
---
 src/include/mk_macros.h |    7 +++++++
 src/include/mk_plugin.h |    4 ++--
 src/include/mk_string.h |    3 ++-
 src/include/mk_utils.h  |    2 +-
 4 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/include/mk_macros.h b/src/include/mk_macros.h
index 70b8782..03e1a3b 100644
--- a/src/include/mk_macros.h
+++ b/src/include/mk_macros.h
@@ -61,6 +61,13 @@
 #ifndef ARRAY_SIZE
 # define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
 #endif
+
+#ifdef __GNUC__ /* GCC supports this since 2.3. */
+ #define PRINTF_WARNINGS(a,b) __attribute__ ((format (printf, a, b)))
+#else
+ #define PRINTF_WARNINGS(a,b)
+#endif
+
 /*
  * Validation macros
  * -----------------
diff --git a/src/include/mk_plugin.h b/src/include/mk_plugin.h
index 58e187e..68ef7fc 100644
--- a/src/include/mk_plugin.h
+++ b/src/include/mk_plugin.h
@@ -188,7 +188,7 @@ struct plugin_api
     struct sched_list_node *sched_list;
 
     /* Error helper */
-    void (*_error) (int, const char *, ...);
+    void (*_error) (int, const char *, ...) PRINTF_WARNINGS(2,3);
 
     /* HTTP request function */
     int   (*http_request_end) (int);
@@ -206,7 +206,7 @@ struct plugin_api
     int   (*str_itop) (int, mk_pointer *);
     int   (*str_search) (const char *, const char *, int);
     int   (*str_search_n) (const char *, const char *, int, int);
-    char *(*str_build) (char **, unsigned long *, const char *, ...);
+    char *(*str_build) (char **, unsigned long *, const char *, ...) 
PRINTF_WARNINGS(3,4);
     char *(*str_dup) (const char *);
     char *(*str_copy_substr) (const char *, int, int);
     struct mk_list *(*str_split_line) (const char *);
diff --git a/src/include/mk_string.h b/src/include/mk_string.h
index 862b5db..62baeee 100644
--- a/src/include/mk_string.h
+++ b/src/include/mk_string.h
@@ -24,6 +24,7 @@
 
 #include "memory.h"
 #include "mk_list.h"
+#include "mk_macros.h"
 
 /* Case sensitive OFF */
 #define MK_STR_SENSITIVE 0
@@ -58,7 +59,7 @@ struct mk_list *mk_string_split_line(const char *line);
 void mk_string_split_free(struct mk_list *list);
 int mk_string_trim(char **str);
 char *mk_string_build(char **buffer, unsigned long *len,
-                      const char *format, ...);
+                      const char *format, ...) PRINTF_WARNINGS(3,4);
 int mk_string_itop(int n, mk_pointer *p);
 char *mk_string_copy_substr(const char *string, int pos_init, int pos_end);
 
diff --git a/src/include/mk_utils.h b/src/include/mk_utils.h
index 3a15ace..a9dff24 100644
--- a/src/include/mk_utils.h
+++ b/src/include/mk_utils.h
@@ -79,7 +79,7 @@ int mk_utils_print_errno(int n);
 int mk_utils_register_pid(void);
 int mk_utils_remove_pid(void);
 
-void mk_print(int type, const char *format, ...);
+void mk_print(int type, const char *format, ...) PRINTF_WARNINGS(2,3);
 
 pthread_t mk_utils_worker_spawn(void (*func) (void *));
 int mk_utils_worker_rename(const char *title);
-- 
1.7.2.1

_______________________________________________
Monkey mailing list
[email protected]
http://lists.monkey-project.com/listinfo/monkey

Reply via email to