changeset 55:cda80ba48029

Add beautiful gcc attribute to buffer
author David Demelier <markand@malikania.fr>
date Fri, 04 Nov 2011 16:11:31 +0100
parents ebf1460c331e
children 770737295987
files buffer.h
diffstat 1 files changed, 26 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/buffer.h	Fri Nov 04 15:59:47 2011 +0100
+++ b/buffer.h	Fri Nov 04 16:11:31 2011 +0100
@@ -23,6 +23,22 @@
 
 #include <stdarg.h>
 
+/*
+ * Some useful attributes with gcc or clang.
+ */
+
+#if defined(__GNUC__)
+# pragma GCC diagnostic warning	"-Wnonnull"
+# pragma GCC diagnostic warning	"-Wformat"
+# define __at_malloc		__attribute__ ((malloc))
+# define __at_nonnull		__attribute__ ((nonnull(1)))
+# define __at_printf(...)	__attribute__ ((format(printf, __VA_ARGS__)))
+#else
+# define __at_malloc
+# define __at_nonnull
+# define __at_printf(...)
+#endif
+
 enum buffer_type {
 	BUFFER_FIXED	= 0,
 	BUFFER_AUTO	= 1
@@ -36,15 +52,15 @@
 	int		bsize;		/* initial length */
 };
 
-struct buffer	*buffer_new(enum buffer_type, int);
-int		buffer_strcat(struct buffer *, const char *);
-int		buffer_putc(struct buffer *buf, char);
-int		buffer_bcat(struct buffer *, const void *, size_t);
-int		buffer_vprintf(struct buffer *, const char *, va_list);
-int		buffer_printf(struct buffer *, const char *, ...);
-int		buffer_shrink(struct buffer *);
-char		*buffer_end(struct buffer *);
-void		buffer_clear(struct buffer *);
-void		buffer_free(struct buffer *);
+struct buffer	*buffer_new(enum buffer_type, int) __at_malloc;
+int		buffer_strcat(struct buffer *, const char *) __at_nonnull;
+int		buffer_putc(struct buffer *buf, char) __at_nonnull;
+int		buffer_bcat(struct buffer *, const void *, size_t) __at_nonnull;
+int		buffer_vprintf(struct buffer *, const char *, va_list) __at_nonnull;
+int		buffer_printf(struct buffer *, const char *, ...) __at_printf(2, 3);
+int		buffer_shrink(struct buffer *) __at_nonnull;
+char		*buffer_end(struct buffer *) __at_nonnull;
+void		buffer_clear(struct buffer *) __at_nonnull;
+void		buffer_free(struct buffer *) __at_nonnull;
 
 #endif /* _BUFFER_H_ */