diff options
-rw-r--r-- | lib/ChangeLog | 4 | ||||
-rw-r--r-- | lib/Makefile.am | 2 | ||||
-rw-r--r-- | lib/libeu.h | 2 | ||||
-rw-r--r-- | lib/xasprintf.c | 52 |
4 files changed, 59 insertions, 1 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog index 563b0b6a..468001f8 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,5 +1,9 @@ 2021-09-06 Dmitry V. Levin <ldv@altlinux.org> + * xasprintf.c: New file. + * Makefile.am (libeu_a_SOURCES): Add it. + * libeu.h (xasprintf): New prototype. + * dynamicsizehash.c (INIT(NAME)): Remove cast of calloc return value. * dynamicsizehash_concurrent.c (INIT(NAME)): Remove cast of malloc return value. diff --git a/lib/Makefile.am b/lib/Makefile.am index 766fbcd7..42ddf5ae 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -33,7 +33,7 @@ AM_CPPFLAGS += -I$(srcdir)/../libelf noinst_LIBRARIES = libeu.a -libeu_a_SOURCES = xstrdup.c xstrndup.c xmalloc.c next_prime.c \ +libeu_a_SOURCES = xasprintf.c xstrdup.c xstrndup.c xmalloc.c next_prime.c \ crc32.c crc32_file.c \ color.c error.c printversion.c diff --git a/lib/libeu.h b/lib/libeu.h index ecb4d011..e849a79e 100644 --- a/lib/libeu.h +++ b/lib/libeu.h @@ -39,6 +39,8 @@ extern void *xrealloc (void *, size_t) __attribute__ ((__malloc__)); extern char *xstrdup (const char *) __attribute__ ((__malloc__)); extern char *xstrndup (const char *, size_t) __attribute__ ((__malloc__)); +extern char *xasprintf(const char *fmt, ...) + __attribute__ ((format (printf, 1, 2))) __attribute__ ((__malloc__)); extern uint32_t crc32 (uint32_t crc, unsigned char *buf, size_t len); extern int crc32_file (int fd, uint32_t *resp); diff --git a/lib/xasprintf.c b/lib/xasprintf.c new file mode 100644 index 00000000..179ea2e8 --- /dev/null +++ b/lib/xasprintf.c @@ -0,0 +1,52 @@ +/* A wrapper around vasprintf that dies in case of an error. + Copyright (c) 2021 Dmitry V. Levin <ldv@altlinux.org> + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * 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 + + or both in parallel, as here. + + elfutils 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 copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see <http://www.gnu.org/licenses/>. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <libintl.h> +#include "libeu.h" +#include "system.h" + +char * +xasprintf (const char *fmt, ...) +{ + char *res; + va_list ap; + + va_start (ap, fmt); + if (unlikely (vasprintf (&res, fmt, ap) < 0)) + error (EXIT_FAILURE, 0, _("memory exhausted")); + va_end(ap); + + return res; +} |