From: Mark Wooding Date: Fri, 19 Feb 2016 21:42:57 +0000 (+0000) Subject: server/admin.c: Pass captured `va_list' consistently by reference. X-Git-Tag: 1.0.0pre18~6 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/tripe/commitdiff_plain/b730d38c3cdd85ed9fddba7773b08e4cb42ba7b2 server/admin.c: Pass captured `va_list' consistently by reference. On amd64, they're secretly arrays, and once one's decayed into a pointer to a strange thing, there's no getting it back again. --- diff --git a/server/admin.c b/server/admin.c index ef5fddf3..877f7ad2 100644 --- a/server/admin.c +++ b/server/admin.c @@ -237,7 +237,7 @@ static void a_flush(int fd, unsigned mode, void *v) * * Arguments: @dstr *d@ = where to leave the formatted message * @const char *fmt@ = pointer to format string - * @va_list ap@ = arguments in list + * @va_list *ap@ = arguments in list * * Returns: --- * @@ -262,14 +262,14 @@ static void a_flush(int fd, unsigned mode, void *v) * * "[!]..." ... -- @dstr_putf@-like string as single token */ -void a_vformat(dstr *d, const char *fmt, va_list ap) +void a_vformat(dstr *d, const char *fmt, va_list *ap) { dstr dd = DSTR_INIT; while (fmt) { if (*fmt == '*') { if (d->len) dstr_putc(d, ' '); - dstr_vputf(d, fmt + 1, &ap); + dstr_vputf(d, fmt + 1, ap); } else if (*fmt == '?') { if (strcmp(fmt, "?ADDR") == 0) { const addr *a = va_arg(ap, const addr *); @@ -306,7 +306,7 @@ void a_vformat(dstr *d, const char *fmt, va_list ap) } else { if (*fmt == '!') fmt++; DRESET(&dd); - dstr_vputf(&dd, fmt, &ap); + dstr_vputf(&dd, fmt, ap); u_quotify(d, dd.buf); } fmt = va_arg(ap, const char *); @@ -331,7 +331,7 @@ void a_format(dstr *d, const char *fmt, ...) va_list ap; va_start(ap, fmt); - a_vformat(d, fmt, ap); + a_vformat(d, fmt, &ap); va_end(ap); } @@ -350,7 +350,7 @@ void a_format(dstr *d, const char *fmt, ...) */ static void a_vwrite(admin *a, const char *status, const char *tag, - const char *fmt, va_list ap) + const char *fmt, va_list *ap) { dstr d = DSTR_INIT; @@ -369,7 +369,7 @@ static void a_write(admin *a, const char *status, const char *tag, va_list ap; va_start(ap, fmt); - a_vwrite(a, status, tag, fmt, ap); + a_vwrite(a, status, tag, fmt, &ap); va_end(ap); } @@ -391,7 +391,7 @@ static void a_info(admin *a, const char *fmt, ...) va_list ap; va_start(ap, fmt); - a_vwrite(a, "INFO", 0, fmt, ap); + a_vwrite(a, "INFO", 0, fmt, &ap); va_end(ap); } @@ -400,7 +400,7 @@ static void a_fail(admin *a, const char *fmt, ...) va_list ap; va_start(ap, fmt); - a_vwrite(a, "FAIL", 0, fmt, ap); + a_vwrite(a, "FAIL", 0, fmt, &ap); va_end(ap); } @@ -445,7 +445,7 @@ static void a_rawalert(unsigned f_and, unsigned f_eq, const char *status, } static void a_valert(unsigned f_and, unsigned f_eq, const char *status, - const char *fmt, va_list ap) + const char *fmt, va_list *ap) { dstr d = DSTR_INIT; @@ -462,7 +462,7 @@ static void a_alert(unsigned f_and, unsigned f_eq, const char *status, va_list ap; va_start(ap, fmt); - a_valert(f_and, f_eq, status, fmt, ap); + a_valert(f_and, f_eq, status, fmt, &ap); va_end(ap); } @@ -482,11 +482,11 @@ void a_warn(const char *fmt, ...) va_start(ap, fmt); if (flags & F_INIT) - a_valert(0, 0, "WARN", fmt, ap); + a_valert(0, 0, "WARN", fmt, &ap); else { dstr d = DSTR_INIT; fprintf(stderr, "%s: ", QUIS); - a_vformat(&d, fmt, ap); + a_vformat(&d, fmt, &ap); dstr_putc(&d, '\n'); dstr_write(&d, stderr); dstr_destroy(&d); @@ -526,7 +526,7 @@ void a_notify(const char *fmt, ...) va_list ap; va_start(ap, fmt); - a_valert(AF_NOTE, AF_NOTE, "NOTE", fmt, ap); + a_valert(AF_NOTE, AF_NOTE, "NOTE", fmt, &ap); va_end(ap); } @@ -696,7 +696,7 @@ static void a_bginfo(admin_bgop *bg, const char *fmt, ...) { va_list ap; va_start(ap, fmt); - a_vwrite(bg->a, "INFO", bg->tag, fmt, ap); + a_vwrite(bg->a, "INFO", bg->tag, fmt, &ap); va_end(ap); } @@ -704,7 +704,7 @@ static void a_bgfail(admin_bgop *bg, const char *fmt, ...) { va_list ap; va_start(ap, fmt); - a_vwrite(bg->a, "FAIL", bg->tag, fmt, ap); + a_vwrite(bg->a, "FAIL", bg->tag, fmt, &ap); va_end(ap); } diff --git a/server/tripe.h b/server/tripe.h index de3e016c..d419c287 100644 --- a/server/tripe.h +++ b/server/tripe.h @@ -939,7 +939,7 @@ extern int c_check(buf */*b*/); * * Arguments: @dstr *d@ = where to leave the formatted message * @const char *fmt@ = pointer to format string - * @va_list ap@ = arguments in list + * @va_list *ap@ = arguments in list * * Returns: --- * @@ -964,7 +964,7 @@ extern int c_check(buf */*b*/); * * "[!]..." ... -- @dstr_putf@-like string as single token */ -extern void a_vformat(dstr */*d*/, const char */*fmt*/, va_list /*ap*/); +extern void a_vformat(dstr */*d*/, const char */*fmt*/, va_list */*ap*/); /* --- @a_format@ --- * *