#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;
char *avahi_strndup(const char *s, size_t max) {
char *r;
size_t size;
+ const char *p;
if (!s)
return NULL;
- size = strlen(s);
-
- if (size > max)
- size = max;
+ for (p = s, size = 0;
+ size < max && *p;
+ p++, size++);
- if (!(r = avahi_malloc(size+1)))
+ if (!(r = avahi_new(char, size+1)))
return NULL;
memcpy(r, s, size);
}
char *avahi_strdup_vprintf(const char *fmt, va_list ap) {
- size_t len = 100;
+ size_t len = 80;
char *buf;
assert(fmt);
for (;;) {
int n;
char *nbuf;
-
- n = vsnprintf(buf, len, fmt, ap);
+ va_list ap2;
+
+ va_copy (ap2, ap);
+ n = vsnprintf(buf, len, fmt, ap2);
+ va_end (ap2);
if (n >= 0 && n < (int) len)
return buf;