X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/e6bb9ec43b332fd1a4b0faddbe3c9f2f2ee80dde..9291a5f82480f2458e04cb9ea7e6749bc952b308:/uip/ali.c diff --git a/uip/ali.c b/uip/ali.c index e9a63fda..229831b9 100644 --- a/uip/ali.c +++ b/uip/ali.c @@ -1,41 +1,41 @@ - -/* - * ali.c -- list nmh mail aliases +/* ali.c -- list nmh mail aliases * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for * complete copyright information. */ -#include -#include -#include -#include -#include - -static struct swit switches[] = { -#define ALIASW 0 - { "alias aliasfile", 0 }, -#define NALIASW 1 - { "noalias", -7 }, -#define LISTSW 2 - { "list", 0 }, -#define NLISTSW 3 - { "nolist", 0 }, -#define NORMSW 4 - { "normalize", 0 }, -#define NNORMSW 5 - { "nonormalize", 0 }, -#define USERSW 6 - { "user", 0 }, -#define NUSERSW 7 - { "nouser", 0 }, -#define VERSIONSW 8 - { "version", 0 }, -#define HELPSW 9 - { "help", 0 }, - { NULL, 0 } -}; +#include "h/mh.h" +#include "sbr/getcpy.h" +#include "sbr/context_find.h" +#include "sbr/brkstring.h" +#include "sbr/ambigsw.h" +#include "sbr/print_version.h" +#include "sbr/print_help.h" +#include "sbr/error.h" +#include "h/addrsbr.h" +#include "h/aliasbr.h" +#include "h/mts.h" +#include "h/done.h" +#include "h/utils.h" + +#define ALI_SWITCHES \ + X("alias aliasfile", 0, ALIASW) \ + X("noalias", 0, NALIASW) \ + X("list", 0, LISTSW) \ + X("nolist", 0, NLISTSW) \ + X("user", 0, USERSW) \ + X("nouser", 0, NUSERSW) \ + X("version", 0, VERSIONSW) \ + X("help", 0, HELPSW) \ + +#define X(sw, minchars, id) id, +DEFINE_SWITCH_ENUM(ALI); +#undef X + +#define X(sw, minchars, id) { sw, minchars, id }, +DEFINE_SWITCH_ARRAY(ALI, switches); +#undef X static int pos = 1; @@ -44,33 +44,28 @@ extern struct aka *akahead; /* * prototypes */ -static void print_aka (char *, int, int); -static void print_usr (char *, int, int); +static void print_aka (char *, bool, int); +static void print_usr (char *, bool); int main (int argc, char **argv) { - int i, vecp = 0, inverted = 0, list = 0; - int noalias = 0, normalize = AD_NHST; + int i, vecp = 0; + bool inverted, list, noalias; char *cp, **ap, **argp, buf[BUFSIZ]; /* Really only need to allocate for argc-1, but must allocate at least 1, so go ahead and allocate for argc char pointers. */ char **vec = mh_xmalloc (argc * sizeof (char *)), **arguments; struct aka *ak; -#ifdef LOCALE - setlocale(LC_ALL, ""); -#endif - invo_name = r1bindex (argv[0], '/'); + if (nmh_init(argv[0], true, true)) { return 1; } - /* read user profile/context */ - context_read(); - - mts_init (invo_name); + mts_init (); arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; + inverted = list = noalias = false; while ((cp = *argp++)) { if (*cp == '-') { switch (smatch (++cp, switches)) { @@ -78,7 +73,7 @@ main (int argc, char **argv) ambigsw (cp, switches); done (1); case UNKWNSW: - adios (NULL, "-%s unknown", cp); + die("-%s unknown", cp); case HELPSW: snprintf (buf, sizeof(buf), "%s [switches] aliases ...", @@ -91,33 +86,26 @@ main (int argc, char **argv) case ALIASW: if (!(cp = *argp++) || *cp == '-') - adios (NULL, "missing argument to %s", argp[-2]); + die("missing argument to %s", argp[-2]); if ((i = alias (cp)) != AK_OK) - adios (NULL, "aliasing error in %s - %s", cp, akerror (i)); + die("aliasing error in %s - %s", cp, akerror (i)); continue; case NALIASW: - noalias++; + noalias = true; continue; case LISTSW: - list++; + list = true; continue; case NLISTSW: - list = 0; - continue; - - case NORMSW: - normalize = AD_HOST; - continue; - case NNORMSW: - normalize = AD_NHST; + list = false; continue; case USERSW: - inverted++; + inverted = true; continue; case NUSERSW: - inverted = 0; + inverted = false; continue; } } @@ -127,7 +115,7 @@ main (int argc, char **argv) } else { /* Should never happen, but try to protect against code changes that could allow it. */ - adios (NULL, "too many arguments"); + die("too many arguments"); } } @@ -136,11 +124,10 @@ main (int argc, char **argv) if ((cp = context_find ("Aliasfile"))) { char *dp = NULL; - for (ap = brkstring(dp = getcpy(cp), " ", "\n"); ap && *ap; ap++) + for (ap = brkstring(dp = mh_xstrdup(cp), " ", "\n"); ap && *ap; ap++) if ((i = alias (*ap)) != AK_OK) - adios (NULL, "aliasing error in %s - %s", *ap, akerror (i)); - if (dp) - free(dp); + die("aliasing error in %s - %s", *ap, akerror (i)); + free(dp); } alias (AliasFile); } @@ -150,11 +137,11 @@ main (int argc, char **argv) */ if (inverted) { if (vecp == 0) - adios (NULL, "usage: %s -user addresses ... (you forgot the addresses)", + die("usage: %s -user addresses ... (you forgot the addresses)", invo_name); for (i = 0; i < vecp; i++) - print_usr (vec[i], list, normalize); + print_usr (vec[i], list); } else { if (vecp) { /* print specified aliases */ @@ -163,9 +150,13 @@ main (int argc, char **argv) } else { /* print them all */ for (ak = akahead; ak; ak = ak->ak_next) { + char *res; + printf ("%s: ", ak->ak_name); pos += strlen (ak->ak_name) + 1; - print_aka (akresult (ak), list, pos); + res = akresult(ak); + print_aka(res, list, pos); + free(res); } } } @@ -176,12 +167,12 @@ main (int argc, char **argv) } static void -print_aka (char *p, int list, int margin) +print_aka (char *p, bool list, int margin) { char c; if (p == NULL) { - printf ("\n"); + puts(""); return; } @@ -193,10 +184,10 @@ print_aka (char *p, int list, int margin) printf ("\n%*s", margin, ""); else { if (pos >= 68) { - printf (",\n "); + fputs(",\n ", stdout); pos = 2; } else { - printf (", "); + fputs(", ", stdout); pos += 2; } } @@ -216,16 +207,16 @@ print_aka (char *p, int list, int margin) } static void -print_usr (char *s, int list, int norm) +print_usr (char *s, bool list) { - register char *cp, *pp, *vp; - register struct aka *ak; - register struct mailname *mp, *np; + char *cp, *pp, *vp; + struct aka *ak; + struct mailname *mp, *np; if ((pp = getname (s)) == NULL) - adios (NULL, "no address in \"%s\"", s); - if ((mp = getm (pp, NULL, 0, norm, NULL)) == NULL) - adios (NULL, "bad address \"%s\"", s); + die("no address in \"%s\"", s); + if ((mp = getm (pp, NULL, 0, NULL, 0)) == NULL) + die("bad address \"%s\"", s); while (getname ("")) continue; @@ -233,10 +224,12 @@ print_usr (char *s, int list, int norm) for (ak = akahead; ak; ak = ak->ak_next) { pp = akresult (ak); while ((cp = getname (pp))) { - if ((np = getm (cp, NULL, 0, norm, NULL)) == NULL) + if ((np = getm (cp, NULL, 0, NULL, 0)) == NULL) continue; - if (!mh_strcasecmp (mp->m_host, np->m_host) - && !mh_strcasecmp (mp->m_mbox, np->m_mbox)) { + if (!strcasecmp (FENDNULL(mp->m_host), + FENDNULL(np->m_host)) && + !strcasecmp (FENDNULL(mp->m_mbox), + FENDNULL(np->m_mbox))) { vp = vp ? add (ak->ak_name, add (",", vp)) : getcpy (ak->ak_name); mnfree (np); @@ -249,13 +242,7 @@ print_usr (char *s, int list, int norm) } mnfree (mp); -#if 0 - printf ("%s: ", s); - print_aka (vp ? vp : s, list, pos += strlen (s) + 1); -#else print_aka (vp ? vp : s, list, 0); -#endif - if (vp) - free (vp); + free(vp); }