/* * memory wrappers * * Copyright (c) Artem Bityutskiy, 2007, 2008 * Copyright 2001, 2002 Red Hat, Inc. * 2001 David A. Schleef * 2002 Axis Communications AB * 2001, 2002 Erik Andersen * 2004 University of Szeged, Hungary * 2006 KaiGai Kohei * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __MTD_UTILS_XALLOC_H__ #define __MTD_UTILS_XALLOC_H__ #include #include #include /* * Mark these functions as unused so that gcc does not emit warnings * when people include this header but don't use every function. */ __attribute__((unused)) static void *xmalloc(size_t size) { void *ptr = malloc(size); if (ptr == NULL && size != 0) sys_errmsg_die("out of memory"); return ptr; } __attribute__((unused)) static void *xcalloc(size_t nmemb, size_t size) { void *ptr = calloc(nmemb, size); if (ptr == NULL && nmemb != 0 && size != 0) sys_errmsg_die("out of memory"); return ptr; } __attribute__((unused)) static void *xzalloc(size_t size) { return xcalloc(1, size); } __attribute__((unused)) static void *xrealloc(void *ptr, size_t size) { ptr = realloc(ptr, size); if (ptr == NULL && size != 0) sys_errmsg_die("out of memory"); return ptr; } __attribute__((unused)) static char *xstrdup(const char *s) { char *t; if (s == NULL) return NULL; t = strdup(s); if (t == NULL) sys_errmsg_die("out of memory"); return t; } #ifdef _GNU_SOURCE __attribute__((unused)) static int xasprintf(char **strp, const char *fmt, ...) { int cnt; va_list ap; va_start(ap, fmt); cnt = vasprintf(strp, fmt, ap); va_end(ap); if (cnt == -1) sys_errmsg_die("out of memory"); return cnt; } #endif #endif /* !__MTD_UTILS_XALLOC_H__ */