Mercurial > code
changeset 58:669f2734557d
Use gcc/clang attributes when possible
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 09 Nov 2011 18:36:04 +0100 |
parents | 311eaa9d004c |
children | 8a8db17c02a4 |
files | array.h |
diffstat | 1 files changed, 23 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/array.h Wed Nov 09 18:35:35 2011 +0100 +++ b/array.h Wed Nov 09 18:36:04 2011 +0100 @@ -19,6 +19,15 @@ #ifndef _ARRAY_H_ #define _ARRAY_H_ +/* Add some nonnull attributes for gcc/clang */ +#ifdef __GNUC__ +#define __at_malloc __attribute__ ((malloc)) +#define __at_nonnull(...) __attribute__ ((nonnull (__VA_ARGS__))) +#else +#define __at_malloc +#define __at_nonnull(...) +#endif + #define ARRAY_DEFAULT_BSIZE 128 enum array_type { @@ -39,20 +48,20 @@ typedef void (*array_map_fn)(void *, void *); typedef int (*array_cmp_fn)(void *, void *); -struct array *array_new(enum array_type, size_t, int); -int array_push(struct array *, const void *); -int array_insert(struct array *, const void *, int); -int array_append(struct array *, const void *); -void array_pop(struct array *); -void array_unqueue(struct array *); -void array_remove(struct array *, int); -void array_unref(struct array *, const void *); -int array_iswap(struct array *, int, int); -int array_pswap(struct array *, const void *, const void *); -void array_map(const struct array *, array_map_fn, void *); -void *array_find(const struct array *, array_cmp_fn, int *, void *); -void array_clear(struct array *); -void array_free(struct array *); +struct array *array_new(enum array_type, size_t, int) __at_malloc; +int array_push(struct array *, const void *) __at_nonnull(1, 2); +int array_insert(struct array *, const void *, int) __at_nonnull(1, 2); +int array_append(struct array *, const void *) __at_nonnull(1, 2); +void array_pop(struct array *) __at_nonnull(1); +void array_unqueue(struct array *) __at_nonnull(1); +void array_remove(struct array *, int) __at_nonnull(1); +void array_unref(struct array *, const void *) __at_nonnull(1); +int array_iswap(struct array *, int, int) __at_nonnull(1); +int array_pswap(struct array *, const void *, const void *) __at_nonnull(1); +void array_map(const struct array *, array_map_fn, void *) __at_nonnull(1, 2); +void *array_find(const struct array *, array_cmp_fn, int *, void *) __at_nonnull(1, 2); +void array_clear(struct array *) __at_nonnull(1); +void array_free(struct array *) __at_nonnull(1); #define ARRAY_HEAD(a) \ (a->data) @@ -71,5 +80,4 @@ #define ARRAY_FOREACH(a, var) \ for ((a)->i = 0, var = (a)->data; (a)->i < (a)->length; ++(a)->i, ++var) - #endif /* _ARRAY_H_ */