[PATCH] add __attribute__ ((format, ...)) with gcc
"Bernhard R. Link" <[email protected]>
| Newsgroups | gmane.comp.window-managers.ratpoison.devel |
|---|---|
| Message-ID | <[email protected]> |
This allows gcc to check if the variadic arguments fit the format descriptor given. --- src/actions.h | 2 +- src/bar.h | 2 +- src/globals.h | 6 ------ src/ratpoison.h | 11 ++++++++++- src/sbuf.h | 4 ++-- 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/actions.h b/src/actions.h index 837d64f..ac7e697 100644 --- a/src/actions.h +++ b/src/actions.h @@ -225,7 +225,7 @@ void del_frame_undo (rp_frame_undo *u); rp_keymap *find_keymap (const char *name); void init_user_commands(void); void initialize_default_keybindings (void); -cmdret *cmdret_new (int success, const char *fmt, ...); +cmdret *cmdret_new (int success, const char *fmt, ...) PRINTFFORMAT(2,3); void cmdret_free (cmdret *ret); void keymap_free (rp_keymap *map); void free_user_commands (void); diff --git a/src/bar.h b/src/bar.h index 005501a..e358182 100644 --- a/src/bar.h +++ b/src/bar.h @@ -33,7 +33,7 @@ int bar_x (rp_screen *s, int width); void message (char *s); void marked_message (char *s, int mark_start, int mark_end); -void marked_message_printf (int mark_start, int mark_end, const char *fmt, ...); +void marked_message_printf (int mark_start, int mark_end, const char *fmt, ...) PRINTFFORMAT(3,4); void redraw_last_message (void); void show_last_message (void); void free_bar (void); diff --git a/src/globals.h b/src/globals.h index c273c3f..e0aabaf 100644 --- a/src/globals.h +++ b/src/globals.h @@ -70,12 +70,6 @@ #define STYLE_NORMAL 0 #define STYLE_INVERSE 1 -#ifdef __GNUC__ -#define UNUSED __attribute__ ((unused)) -#else -#define UNUSED -#endif - /* The list of groups. */ extern struct list_head rp_groups; diff --git a/src/ratpoison.h b/src/ratpoison.h index 69b35c8..80188e8 100644 --- a/src/ratpoison.h +++ b/src/ratpoison.h @@ -33,6 +33,15 @@ #include <X11/Xlocale.h> #include <fcntl.h> +/* Macros to improve gcc warning generation without disturbing other compilers */ +#ifdef __GNUC__ +#define UNUSED __attribute__ ((unused)) +#define PRINTFFORMAT(f, n) __attribute__ ((format (printf, f, n))) +#else +#define UNUSED +#define PRINTFFORMAT(f, n) +#endif + /* Helper macro for error and debug reporting. */ #define PRINT_LINE(type) printf (PACKAGE ":%s:%d: %s: ",__FILE__, __LINE__, #type) @@ -92,7 +101,7 @@ void fatal (const char *msg); void *xmalloc (size_t size); void *xrealloc (void *ptr, size_t size); char *xstrdup (const char *s); -char *xsprintf (const char *fmt, ...); +char *xsprintf (const char *fmt, ...) PRINTFFORMAT(1,2); char *xvsprintf (const char *fmt, va_list ap); int str_comp (char *s1, char *s2, size_t len); char *strtok_ws (char *s); diff --git a/src/sbuf.h b/src/sbuf.h index 23132d4..d0dbf66 100644 --- a/src/sbuf.h +++ b/src/sbuf.h @@ -42,8 +42,8 @@ char *sbuf_nconcat (struct sbuf *b, const char *str, int len); char *sbuf_copy (struct sbuf *b, const char *str); char *sbuf_clear (struct sbuf *b); char *sbuf_get (struct sbuf *b); -char *sbuf_printf (struct sbuf *b, const char *fmt, ...); -char *sbuf_printf_concat (struct sbuf *b, const char *fmt, ...); +char *sbuf_printf (struct sbuf *b, const char *fmt, ...) PRINTFFORMAT(2,3); +char *sbuf_printf_concat (struct sbuf *b, const char *fmt, ...) PRINTFFORMAT(2,3); void sbuf_chop (struct sbuf *b); #endif /* ! _RATPOISON_SBUF_H */ -- 1.9.0 Bernhard R. Link -- F8AC 04D5 0B9B 064B 3383 C3DA AFFC 96D1 151D FFDC