chiark / gitweb /
server/admin.c: Pass captured `va_list' consistently by reference.
authorMark Wooding <mdw@distorted.org.uk>
Fri, 19 Feb 2016 21:42:57 +0000 (21:42 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 30 Apr 2016 17:11:38 +0000 (18:11 +0100)
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.

server/admin.c
server/tripe.h

index ef5fddf3e24c49f5fe8f8db8e91671a402d9a38a..877f7ad227494e201a019948ac8f5252c03afe9b 100644 (file)
@@ -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
  *
  * 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:    ---
  *
  *
  * Returns:    ---
  *
@@ -262,14 +262,14 @@ static void a_flush(int fd, unsigned mode, void *v)
  *               * "[!]..." ... -- @dstr_putf@-like string as single token
  */
 
  *               * "[!]..." ... -- @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 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 *);
     } 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);
     } 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 *);
       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);
   va_list ap;
 
   va_start(ap, fmt);
-  a_vformat(d, fmt, ap);
+  a_vformat(d, fmt, &ap);
   va_end(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,
  */
 
 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;
 
 {
   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);
   va_list ap;
 
   va_start(ap, fmt);
-  a_vwrite(a, status, tag, fmt, ap);
+  a_vwrite(a, status, tag, fmt, &ap);
   va_end(ap);
 }
 
   va_end(ap);
 }
 
@@ -391,7 +391,7 @@ static void a_info(admin *a, const char *fmt, ...)
   va_list ap;
 
   va_start(ap, 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);
 }
 
   va_end(ap);
 }
 
@@ -400,7 +400,7 @@ static void a_fail(admin *a, const char *fmt, ...)
   va_list ap;
 
   va_start(ap, 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);
 }
 
   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,
 }
 
 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;
 
 {
   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);
   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);
 }
 
   va_end(ap);
 }
 
@@ -482,11 +482,11 @@ void a_warn(const char *fmt, ...)
 
   va_start(ap, fmt);
   if (flags & F_INIT)
 
   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);
   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);
     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);
   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);
 }
 
   va_end(ap);
 }
 
@@ -696,7 +696,7 @@ static void a_bginfo(admin_bgop *bg, const char *fmt, ...)
 {
   va_list ap;
   va_start(ap, 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);
 }
 
   va_end(ap);
 }
 
@@ -704,7 +704,7 @@ static void a_bgfail(admin_bgop *bg, const char *fmt, ...)
 {
   va_list ap;
   va_start(ap, 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);
 }
 
   va_end(ap);
 }
 
index de3e016ce3e555dc933d314c1cfd381ce350689c..d419c287cf348165061ea4d21ec68a8437cda4e3 100644 (file)
@@ -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
  *
  * 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:    ---
  *
  *
  * Returns:    ---
  *
@@ -964,7 +964,7 @@ extern int c_check(buf */*b*/);
  *               * "[!]..." ... -- @dstr_putf@-like string as single token
  */
 
  *               * "[!]..." ... -- @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@ --- *
  *
 
 /* --- @a_format@ --- *
  *