chiark / gitweb /
admin: New ?TOKENS formatting directive.
authorMark Wooding <mdw@distorted.org.uk>
Mon, 1 Jan 2007 12:52:33 +0000 (12:52 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Mon, 1 Jan 2007 12:52:33 +0000 (12:52 +0000)
Format a vector of pretokenized strings.  This obviates the need for
a complicated @alertcmd@ and suchlike.  It also means we can, at last,
resurrect @a_alert@.

server/admin.c

index 130e3f7..6ff8815 100644 (file)
@@ -300,6 +300,9 @@ static void a_vformat(dstr *d, const char *fmt, va_list ap)
        base64_encode(&b64, p, n, d);
        base64_encode(&b64, 0, 0, d);
        while (d->len && d->buf[d->len - 1] == '=') d->len--;
+      } else if (strcmp(fmt, "?TOKENS") == 0) {
+       const char *const *av = va_arg(ap, const char *const *);
+       while (*av) quotify(d, *av++);
       } else if (strcmp(fmt, "?PEER") == 0)
        quotify(d, p_name(va_arg(ap, peer *)));
       else if (strcmp(fmt, "?ERRNO") == 0) {
@@ -436,7 +439,6 @@ static void a_valert(unsigned f_and, unsigned f_eq, const char *tag,
   dstr_destroy(&d);
 }
 
-#if 0 /*unused*/
 static void a_alert(unsigned f_and, unsigned f_eq, const char *tag,
                    const char *fmt, ...)
 {
@@ -445,7 +447,6 @@ static void a_alert(unsigned f_and, unsigned f_eq, const char *tag,
   a_valert(f_and, f_eq, tag, fmt, ap);
   va_end(ap);
 }
-#endif
 
 /* --- @a_warn@ --- *
  *
@@ -1211,24 +1212,12 @@ static void acmd_watch(admin *a, unsigned ac, char *av[])
 }
 
 static void alertcmd(admin *a, unsigned f_and, unsigned f_eq,
-                    const char *tag, unsigned ac, char *av[])
-{
-  dstr d = DSTR_INIT;
-  unsigned i;
-
-  dstr_puts(&d, "USER");
-  for (i = 0; i < ac; i++)
-    quotify(&d, av[i]);
-  dstr_putz(&d);
-  a_rawalert(f_and, f_eq, tag, d.buf, d.len);
-  dstr_destroy(&d);
-  a_ok(a);
-}
-
+                    const char *status, char *av[])
+  { a_alert(f_and, f_eq, status, "USER", "?TOKENS", av, A_END); a_ok(a); }
 static void acmd_notify(admin *a, unsigned ac, char *av[])
-  { alertcmd(a, AF_NOTE, AF_NOTE, "NOTE", ac, av); }
+  { alertcmd(a, AF_NOTE, AF_NOTE, "NOTE", av); }
 static void acmd_warn(admin *a, unsigned ac, char *av[])
-  { alertcmd(a, AF_WARN, AF_WARN, "WARN", ac, av); }
+  { alertcmd(a, AF_WARN, AF_WARN, "WARN", av); }
 
 static void acmd_port(admin *a, unsigned ac, char *av[])
 {