On Fri, 2010-10-15 at 18:31 +0200, Lawrence Rust wrote: > On Fri, 2010-10-15 at 11:59 -0300, Davidlohr Bueso wrote: > > xalloc: general purpose memory allocation handling wrappers > > > > Signed-off-by: Davidlohr Bueso <dave@xxxxxxx> > > malloc and calloc may return NULL (implementation dependent) when passed > a zero size, which isn't a failure. > > It is legitimate and sometimes useful to call realloc with a 0 size to > effectively free() a block. In this case the returned value may be NULL > (implementation dependent). Yes indeed, good point. I've also added the alloc_size GCC optimization. Signed-off-by: Davidlohr Bueso <dave@xxxxxxx> --- include/xalloc.h | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 46 insertions(+), 0 deletions(-) create mode 100644 include/xalloc.h diff --git a/include/xalloc.h b/include/xalloc.h new file mode 100644 index 0000000..3bd32c7 --- /dev/null +++ b/include/xalloc.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2010 Davidlohr Bueso <dave@xxxxxxx> + * + * 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 +#define UTIL_LINUX_XALLOC + +#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 %lu 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 %lu 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 %lu bytes", size); + return ret; +} + +#endif -- 1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe util-linux-ng" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html