#include <stdarg.h>
#include <avahi-common/cdecl.h>
+#include <avahi-common/gccmacro.h>
AVAHI_C_DECL_BEGIN
char *avahi_strdup(const char *s);
/** Just like libc's strndup() */
-char *avahi_strndup(const char *s, size_t l);
+char *avahi_strndup(const char *s, size_t l);
+
+/** Duplicate the given memory block into a new one allocated with avahi_malloc() */
+void *avahi_memdup(const void *s, size_t l);
/** Wraps allocator functions */
typedef struct AvahiAllocator AvahiAllocator;
* allocators. The structure is not copied! */
void avahi_set_allocator(const AvahiAllocator *a);
-#ifdef __GNUC__
-char *avahi_strdup_printf(const char *fmt, ... ) __attribute__ ((format(printf, 1, 2)));
-#else
/** Like sprintf() but store the result in a freshly allocated buffer. Free this with avahi_free() */
-char *avahi_strdup_printf(const char *fmt, ... );
-#endif
+char *avahi_strdup_printf(const char *fmt, ... ) AVAHI_GCC_PRINTF_ATTR12;
/** Same as avahi_strdup_printf() but take a va_list instead of varargs */
char *avahi_strdup_vprintf(const char *fmt, va_list ap);