diff options
Diffstat (limited to 'libmisc/xmalloc.c')
-rw-r--r-- | libmisc/xmalloc.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/libmisc/xmalloc.c b/libmisc/xmalloc.c new file mode 100644 index 0000000..056d472 --- /dev/null +++ b/libmisc/xmalloc.c @@ -0,0 +1,46 @@ +/* + * 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-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 <config.h> + +#ident "$Id$" + +#include <stdio.h> +#include <errno.h> +#include "defines.h" +#include "prototypes.h" +#include "shadowlog.h" + +/*@maynotreturn@*/ /*@only@*//*@out@*//*@notnull@*/void *xmalloc (size_t size) +{ + void *ptr; + + ptr = malloc (size); + if (NULL == ptr) { + (void) fprintf (log_get_logfd(), + _("%s: failed to allocate memory: %s\n"), + log_get_progname(), strerror (errno)); + exit (13); + } + return ptr; +} + +/*@maynotreturn@*/ /*@only@*//*@notnull@*/char *xstrdup (const char *str) +{ + return strcpy (xmalloc (strlen (str) + 1), str); +} |