X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=lib%2Fdropin.c;h=23d2b136f304f798ffe9536da0fdee66d23afaaa;hp=a3c28b0412af761358a7718caa44a6d6037235ef;hb=5e0efd53e797a2b5468b91b41b6122f3b942efb2;hpb=63fe89e9eb8ef9077bfe3cd416c86820715eb33b diff --git a/lib/dropin.c b/lib/dropin.c index a3c28b04..23d2b136 100644 --- a/lib/dropin.c +++ b/lib/dropin.c @@ -125,27 +125,36 @@ char *get_current_dir_name(void) #endif #ifndef HAVE_ASPRINTF -int asprintf(char **buf, const char *fmt, ...) +int asprintf(char **buf, const char *fmt, ...) { + int result; + va_list ap; + va_start(ap, fmt); + result = vasprintf(buf, fmt, ap); + va_end(ap); + return result; +} + +int vasprintf(char **buf, const char *fmt, va_list ap) { { int status; - va_list ap; + va_list aq; int len; len = 4096; *buf = xmalloc(len); - va_start(ap, fmt); - status = vsnprintf(*buf, len, fmt, ap); - va_end(ap); + va_copy(aq, ap); + status = vsnprintf(*buf, len, fmt, aq); + va_end(aq); if(status >= 0) *buf = xrealloc(*buf, status + 1); if(status > len - 1) { len = status; - va_start(ap, fmt); - status = vsnprintf(*buf, len, fmt, ap); - va_end(ap); + va_copy(aq, ap); + status = vsnprintf(*buf, len, fmt, aq); + va_end(aq); } return status;