diff options
Diffstat (limited to 'include/xalloc.h')
-rw-r--r-- | include/xalloc.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/include/xalloc.h b/include/xalloc.h new file mode 100644 index 000000000..2a8c78bc0 --- /dev/null +++ b/include/xalloc.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2010 Davidlohr Bueso <dave@gnu.org> + * + * This file may be redistributed under the terms of the + * GNU Lesser General Public License. + * + * General memory allocation wrappers for malloc, realloc and calloc + */ + +#ifndef UTIL_LINUX_XALLOC_H +#define UTIL_LINUX_XALLOC_H + +#include <stdlib.h> +#include <err.h> + +static inline __attribute__((alloc_size(1))) +void *xmalloc(const size_t size) +{ + void *ret = malloc(size); + + if (!ret && size) + err(EXIT_FAILURE, "cannot allocate %zu bytes", size); + return ret; +} + +static inline __attribute__((alloc_size(2))) +void *xrealloc(void *ptr, const size_t size) +{ + void *ret = realloc(ptr, size); + + if (!ret && size) + err(EXIT_FAILURE, "cannot allocate %zu bytes", size); + return ret; +} + +static inline __attribute__((alloc_size(1,2))) +void *xcalloc(const size_t nelems, const size_t size) +{ + void *ret = calloc(nelems, size); + + if (!ret && size && nelems) + err(EXIT_FAILURE, "cannot allocate %zu bytes", size); + return ret; +} + +#endif |