X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-common%2Fmalloc.c;h=23b13a939d0fb536d3a377677b00e81edb47ad48;hb=9c0f9c65093cfa53d45f9b68782321eb8063a032;hp=0dd4eb0db6e31b4768f70d47cab7024a85f26ee8;hpb=c0eb12ae8965571be6afe8c02e5f9d9cc70d073a;p=catta diff --git a/avahi-common/malloc.c b/avahi-common/malloc.c index 0dd4eb0..23b13a9 100644 --- a/avahi-common/malloc.c +++ b/avahi-common/malloc.c @@ -1,18 +1,16 @@ -/* $Id$ */ - /*** This file is part of avahi. - + avahi is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. - + avahi 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 Lesser General Public License for more details. - + You should have received a copy of the GNU Lesser General Public License along with avahi; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 @@ -31,18 +29,26 @@ #include "malloc.h" +#ifndef va_copy +#ifdef __va_copy +#define va_copy(DEST,SRC) __va_copy((DEST),(SRC)) +#else +#define va_copy(DEST,SRC) memcpy(&(DEST), &(SRC), sizeof(va_list)) +#endif +#endif + static const AvahiAllocator *allocator = NULL; static void oom(void) AVAHI_GCC_NORETURN; static void oom(void) { - + static const char msg[] = "Out of memory, aborting ...\n"; const char *n = msg; while (strlen(n) > 0) { ssize_t r; - + if ((r = write(2, n, strlen(n))) < 0) break; @@ -82,7 +88,7 @@ static void *xrealloc(void *p, size_t size) { /* Default implementation for avahi_calloc() */ static void *xcalloc(size_t nmemb, size_t size) { void *p; - + if (size == 0 || nmemb == 0) return NULL; @@ -96,7 +102,7 @@ void *avahi_malloc(size_t size) { if (size <= 0) return NULL; - + if (!allocator) return xmalloc(size); @@ -127,7 +133,7 @@ void avahi_free(void *p) { if (!p) return; - + if (!allocator) { free(p); return; @@ -154,7 +160,7 @@ void *avahi_realloc(void *p, size_t size) { char *avahi_strdup(const char *s) { char *r; size_t size; - + if (!s) return NULL; @@ -170,14 +176,14 @@ char *avahi_strndup(const char *s, size_t max) { char *r; size_t size; const char *p; - + if (!s) return NULL; for (p = s, size = 0; size < max && *p; p++, size++); - + if (!(r = avahi_new(char, size+1))) return NULL; @@ -194,7 +200,7 @@ void avahi_set_allocator(const AvahiAllocator *a) { char *avahi_strdup_vprintf(const char *fmt, va_list ap) { size_t len = 80; char *buf; - + assert(fmt); if (!(buf = avahi_malloc(len))) @@ -206,8 +212,8 @@ char *avahi_strdup_vprintf(const char *fmt, va_list ap) { va_list ap2; va_copy (ap2, ap); - - n = vsnprintf(buf, len, fmt, ap); + n = vsnprintf(buf, len, fmt, ap2); + va_end (ap2); if (n >= 0 && n < (int) len) return buf; @@ -231,7 +237,7 @@ char *avahi_strdup_printf(const char *fmt, ... ) { va_list ap; assert(fmt); - + va_start(ap, fmt); s = avahi_strdup_vprintf(fmt, ap); va_end(ap);