-
-/*
- * addrsbr.c -- parse addresses 822-style
+/* addrsbr.c -- parse addresses 822-style
*
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
REALLYDUMB are now the default in the code.
If #ifdef DUMB is in effect, a full 822-style parser is called
- for syntax recongition. This breaks each address into its components.
+ for syntax recognition. This breaks each address into its components.
Note however that no semantics are assumed about the parts or their
totality. This means that implicit hostnames aren't made explicit,
- and explicit hostnames aren't expanded to their "official" represenations.
+ and explicit hostnames aren't expanded to their "official" representations.
If DUMB is not in effect, then this module does some
high-level thinking about what the addresses are.
static int eai = 0;
void
-enable_eai() {
+enable_eai(void) {
eai = 1;
}
pers = mbox = host = route = grp = note = NULL;
err[0] = '\0';
- if ((ap = getadrx (addrs ? addrs : "", eai)) == NULL) {
+ if ((ap = getadrx (FENDNULL(addrs), eai)) == NULL) {
return NULL;
}
dftype = LOCALHOST;
}
- mp = mh_xcalloc(1, sizeof *mp);
+ NEW0(mp);
mp->m_next = NULL;
mp->m_text = getcpy (str);
if (pers)
- mp->m_pers = getcpy (pers);
+ mp->m_pers = mh_xstrdup(pers);
if (mbox == NULL) {
mp->m_type = BADHOST;
mp->m_ingrp = ingrp;
mp->m_gname = getcpy (grp);
if (note)
- mp->m_note = getcpy (note);
+ mp->m_note = mh_xstrdup(note);
return mp;
}
if (host) {
mp->m_mbox = getcpy (mbox);
- mp->m_host = getcpy (host);
+ mp->m_host = mh_xstrdup(host);
mp->m_type =
strcasecmp (LocalName(0), mp->m_host) ? NETHOST : LOCALHOST;
} else {
if ((pp = strchr(mbox, '!'))) {
*pp++ = '\0';
- mp->m_mbox = getcpy (pp);
+ mp->m_mbox = mh_xstrdup(pp);
mp->m_host = getcpy (mbox);
mp->m_type = UUCPHOST;
} else {
to support wild-card matching. */
if (route)
- mp->m_path = getcpy (route);
+ mp->m_path = mh_xstrdup(route);
mp->m_ingrp = ingrp;
if (grp)
- mp->m_gname = getcpy (grp);
+ mp->m_gname = mh_xstrdup(grp);
if (note)
- mp->m_note = getcpy (note);
+ mp->m_note = mh_xstrdup(note);
return mp;
}
if (!mp)
return;
- if (mp->m_text)
- free (mp->m_text);
- if (mp->m_pers)
- free (mp->m_pers);
- if (mp->m_mbox)
- free (mp->m_mbox);
- if (mp->m_host)
- free (mp->m_host);
- if (mp->m_path)
- free (mp->m_path);
- if (mp->m_gname)
- free (mp->m_gname);
- if (mp->m_note)
- free (mp->m_note);
-
- free ((char *) mp);
-}
+ free(mp->m_text);
+ free(mp->m_pers);
+ free(mp->m_mbox);
+ free(mp->m_host);
+ free(mp->m_path);
+ free(mp->m_gname);
+ free(mp->m_note);
+ free(mp);
+}
-#define empty(s) ((s) ? (s) : "")
char *
auxformat (struct mailname *mp, int extras)
static char buffer[BUFSIZ];
if (mp->m_nohost)
- strncpy (addr, mp->m_mbox ? mp->m_mbox : "", sizeof(addr));
- else
-
- if (mp->m_type != UUCPHOST) {
+ strncpy (addr, FENDNULL(mp->m_mbox), sizeof(addr));
+ else if (mp->m_type != UUCPHOST) {
if (mp->m_host)
- snprintf (addr, sizeof(addr), "%s%s@%s", empty(mp->m_path),
- empty(mp->m_mbox), mp->m_host);
- else snprintf (addr, sizeof(addr), "%s%s", empty(mp->m_path),
- empty(mp->m_mbox));
+ snprintf (addr, sizeof(addr), "%s%s@%s", FENDNULL(mp->m_path),
+ FENDNULL(mp->m_mbox), mp->m_host);
+ else snprintf (addr, sizeof(addr), "%s%s", FENDNULL(mp->m_path),
+ FENDNULL(mp->m_mbox));
} else
snprintf (addr, sizeof(addr), "%s!%s", mp->m_host, mp->m_mbox);
snprintf (buffer, sizeof(buffer), "%s <%s>",
legal_person (mp->m_pers ? mp->m_pers : mp->m_mbox),
addr);
- }
+ } else if (mp->m_note)
+ snprintf (buffer, sizeof(buffer), "%s %s", addr, mp->m_note);
else
- if (mp->m_note)
- snprintf (buffer, sizeof(buffer), "%s %s", addr, mp->m_note);
- else
- strncpy (buffer, addr, sizeof(buffer));
+ strncpy (buffer, addr, sizeof(buffer));
return buffer;
}
ismymbox (struct mailname *np)
{
int oops;
- register int len, i;
- register char *cp;
- register char *pp;
+ int len, i;
+ char *cp;
+ char *pp;
char buffer[BUFSIZ];
struct mailname *mp;
static char *am = NULL;
localmailbox++;
if ((cp = getname(am)) == NULL) {
- admonish (NULL, "Unable to find address in local-mailbox");
+ inform("Unable to find address in local-mailbox, continuing...");
return 0;
}
if ((mq.m_next = getm (cp, NULL, 0, NULL, 0)) == NULL) {
- admonish (NULL, "invalid entry in local-mailbox: %s", cp);
+ inform("invalid entry in local-mailbox: %s, continuing...", cp);
return 0;
}
- /*
- * Sigh, it turns out that the address parser gets messed up
- * if you don't call getname() until it returns NULL.
- */
-
- while ((cp = getname(am)) != NULL)
+ /* Sigh, it turns out that the address parser gets messed up
+ * if you don't call getname() until it returns NULL. */
+ while (getname(am) != NULL)
;
}
oops = 0;
while ((cp = getname (am))) {
if ((mp->m_next = getm (cp, NULL, 0, NULL, 0)) == NULL) {
- admonish (NULL, "illegal address: %s", cp);
+ inform("illegal address: %s, continuing...", cp);
oops++;
} else {
mp = mp->m_next;
}
}
if (oops)
- advise (NULL, "please fix the %s: entry in your %s file",
+ inform("please fix the %s: entry in your %s file",
"alternate-mailboxes", mh_profile);
}
for (mp = &mq; mp; mp = mp->m_next) {
fprintf (stderr, "Local- or Alternate-Mailbox: text=\"%s\" "
"mbox=\"%s\" host=\"%s\" %s\n",
- mp->m_text ? mp->m_text : "", mp->m_mbox,
- mp->m_host ? mp->m_host : "",
+ FENDNULL(mp->m_text), mp->m_mbox,
+ FENDNULL(mp->m_host),
snprintb (buffer, sizeof(buffer), (unsigned) mp->m_type,
WBITS));
}
case UUCPHOST:
if (strcasecmp (np->m_host, SystemName()))
- break; /* fall */
+ break;
+ /* FALLTHRU */
case LOCALHOST:
local_test: ;
if (!strcasecmp (np->m_mbox, mq.m_mbox))