diff --git a/Makefile.in b/Makefile.in index 51cef09..a50a40f 100644 --- a/Makefile.in +++ b/Makefile.in @@ -9,6 +9,7 @@ SRCS= main.c summary.c tools.c pkgindb.c depends.c actions.c \ pkg_check.c pkg_infos.c preferred.c # included from libinstall SRCS+= automatic.c dewey.c fexec.c global.c opattern.c pkgdb.c var.c +SRCS+= xwrapper.c # included from openssh SRCS+= progressmeter.c diff --git a/external/lib.h b/external/lib.h index 07d39fd..c6d3889 100644 --- a/external/lib.h +++ b/external/lib.h @@ -447,6 +447,18 @@ struct pkg_vulnerabilities *parse_pkg_vulnerabilities(const char *, size_t, int) struct pkg_vulnerabilities *read_pkg_vulnerabilities(const char *, int, int); void free_pkg_vulnerabilities(struct pkg_vulnerabilities *); +/* Helper functions for memory allocation */ +char *xstrdup(const char *); +void *xrealloc(void *, size_t); +void *xcalloc(size_t, size_t); +void *xmalloc(size_t); +#if defined(__GNUC__) && __GNUC__ >= 2 +char *xasprintf(const char *, ...) + __attribute__((__format__(__printf__, 1, 2))); +#else +char *xasprintf(const char *, ...); +#endif + /* Externs */ extern Boolean Verbose; extern Boolean Fake; diff --git a/external/xwrapper.c b/external/xwrapper.c new file mode 100644 index 0000000..0b3bb23 --- /dev/null +++ b/external/xwrapper.c @@ -0,0 +1,100 @@ +/* NetBSD: xwrapper.c,v 1.2 2009/02/02 12:35:01 joerg Exp */ + +/*- + * Copyright (c) 2008 Joerg Sonnenberger . + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif +#if HAVE_NBCOMPAT_H +#include +#endif + +#if HAVE_ERR_H +#include +#endif +#include +#include +#include +#include + +#include "lib.h" + +char * +xasprintf(const char *fmt, ...) +{ + va_list ap; + char *buf; + + va_start(ap, fmt); + if (vasprintf(&buf, fmt, ap) == -1) + err(1, "asprintf failed"); + va_end(ap); + return buf; +} + +void * +xmalloc(size_t len) +{ + void *ptr; + + if ((ptr = malloc(len)) == NULL) + err(1, "malloc failed"); + return ptr; +} + +void * +xcalloc(size_t len, size_t n) +{ + void *ptr; + + if ((ptr = calloc(len, n)) == NULL) + err(1, "calloc failed"); + return ptr; +} + +void * +xrealloc(void *buf, size_t len) +{ + void *ptr; + + if ((ptr = realloc(buf, len)) == NULL) + err(1, "realloc failed"); + return ptr; +} + +char * +xstrdup(const char *str) +{ + char *buf; + + if ((buf = strdup(str)) == NULL) + err(1, "strdup failed"); + return buf; +}