// SPDX-FileCopyrightText: 1990-1994, Julianne Frances Haugh // SPDX-FileCopyrightText: 1996-1998, Marek Michałkiewicz // SPDX-FileCopyrightText: 2003-2006, Tomasz Kłoczko // SPDX-FileCopyrightText: 2008 , Nicolas François // SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar // SPDX-License-Identifier: BSD-3-Clause /* Replacements for malloc and strdup with error checking. Too trivial to be worth copyrighting :-). I did that because a lot of code used malloc and strdup without checking for NULL pointer, and I like some message better than a core dump... --marekm Yeh, but. Remember that bailing out might leave the system in some bizarre state. You really want to put in error checking, then add some back-out failure recovery code. -- jfh */ #include #include "alloc.h" #include #include #include #include "defines.h" #include "prototypes.h" #include "shadowlog.h" extern inline void *xmallocarray(size_t nmemb, size_t size); extern inline void *mallocarray(size_t nmemb, size_t size); extern inline void *reallocarrayf(void *p, size_t nmemb, size_t size); void * xcalloc(size_t nmemb, size_t size) { void *p; p = calloc(nmemb, size); if (p == NULL) goto x; return p; x: fprintf(log_get_logfd(), _("%s: %s\n"), log_get_progname(), strerror(errno)); exit(13); } void * xreallocarray(void *p, size_t nmemb, size_t size) { p = reallocarrayf(p, nmemb, size); if (p == NULL) goto x; return p; x: fprintf(log_get_logfd(), _("%s: %s\n"), log_get_progname(), strerror(errno)); exit(13); }