* support/Util/dbuf_string.h: added ATTRIBUTE_PRINTF to dbuf_printf()
[fw/sdcc] / support / Util / dbuf_string.h
index 8c4d78bb801a7fb06688bf6160201a37b50c8df5..2c45181ed505570d426d16167d8e94f201821107 100644 (file)
 #include <stdarg.h>
 #include "dbuf.h"
 
+/* Attribute `nonnull' was valid as of gcc 3.3.  */
+#ifndef ATTRIBUTE_NONNULL
+# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)
+#  define ATTRIBUTE_NONNULL(m) __attribute__ ((__nonnull__ (m)))
+# else
+#  define ATTRIBUTE_NONNULL(m)
+# endif /* GNUC >= 3.3 */
+#endif /* ATTRIBUTE_NONNULL */
+
+/* The __-protected variants of `format' and `printf' attributes
+   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
+#ifndef ATTRIBUTE_PRINTF
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+#  define ATTRIBUTE_PRINTF(m, n) __attribute__ ((__format__ (__printf__, m, n))) ATTRIBUTE_NONNULL(m)
+#else
+#  define ATTRIBUTE_PRINTF(m, n)
+# endif /* GNUC >= 2.7 */
+#endif /* ATTRIBUTE_PRINTF */
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -34,7 +53,7 @@ extern "C" {
 int dbuf_append_str(struct dbuf_s *dbuf, const char *str);
 int dbuf_append_char(struct dbuf_s *dbuf, char chr);
 int dbuf_vprintf(struct dbuf_s *dbuf, const char *format, va_list args);
-int dbuf_printf (struct dbuf_s *dbuf, const char *format, ...);
+int dbuf_printf (struct dbuf_s *dbuf, const char *format, ...) ATTRIBUTE_PRINTF(2, 3);
 void dbuf_write (struct dbuf_s *dbuf, FILE *dest);
 void dbuf_write_and_destroy (struct dbuf_s *dbuf, FILE *dest);