From 3331936b5cfb724db8b70b3b8f14112be0e8b9e8 Mon Sep 17 00:00:00 2001 Message-Id: <3331936b5cfb724db8b70b3b8f14112be0e8b9e8.1714821995.git.mdw@distorted.org.uk> From: Mark Wooding Date: Mon, 1 Jan 2007 12:52:33 +0000 Subject: [PATCH] admin: New ?TOKENS formatting directive. Organization: Straylight/Edgeware From: Mark Wooding 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 | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/server/admin.c b/server/admin.c index 130e3f72..6ff88159 100644 --- a/server/admin.c +++ b/server/admin.c @@ -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[]) { -- [mdw]