]> diplodocus.org Git - nmh/blobdiff - sbr/addrsbr.c
Alter mh-chart(7)'s NAME to be lowercase.
[nmh] / sbr / addrsbr.c
index 23a7cb4cbbd4d27adbfbcda813993cf3a36a126f..49953f61de73f9b0ee68a4bab790b6c7ad7cbddd 100644 (file)
@@ -49,7 +49,7 @@
 
    If an explicit host is not present, then MH checks for a bang to indicate
    an explicit UUCP-style address.  If so, this is noted.  If not, the host is
-   defaulted, typically to the local host.  The lack of an explict host is
+   defaulted, typically to the local host.  The lack of an explicit host is
    also noted.
 
    If an explicit 822-style host is present, then MH checks to see if it
@@ -76,18 +76,24 @@ static char *grp = NULL;
 static char *note = NULL;
 static char err[BUFSIZ];
 static char adr[BUFSIZ];
+static int eai = 0;
+
+void
+enable_eai() {
+    eai = 1;
+}
 
 
 char *
 getname (const char *addrs)
 {
     struct adrx *ap;
-
     pers = mbox = host = route = grp = note = NULL;
     err[0] = '\0';
 
-    if ((ap = getadrx (addrs ? addrs : "")) == NULL)
+    if ((ap = getadrx (addrs ? addrs : "", eai)) == NULL) {
        return NULL;
+    }
 
     strncpy (adr, ap->text, sizeof(adr));
     pers = ap->pers;
@@ -139,20 +145,11 @@ getm (char *str, char *dfhost, int dftype, char *eresult, size_t eresultsize)
        dftype = LOCALHOST;
     }
 
-    mp = (struct mailname *) mh_xcalloc ((size_t) 1, sizeof(*mp));
-    if (mp == NULL) {
-       if (eresult) {
-           strncpy (eresult, "insufficient memory to represent address",
-                    eresultsize);
-           eresult[eresultsize - 1] = '\0';
-       }
-       return NULL;
-    }
-
+    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;
@@ -160,19 +157,19 @@ getm (char *str, char *dfhost, int dftype, char *eresult, size_t eresultsize)
        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 {
@@ -192,12 +189,12 @@ getm (char *str, char *dfhost, int dftype, char *eresult, size_t eresultsize)
        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;
 }
@@ -209,22 +206,15 @@ mnfree (struct mailname *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);
+    mh_xfree(mp->m_text);
+    mh_xfree(mp->m_pers);
+    mh_xfree(mp->m_mbox);
+    mh_xfree(mp->m_host);
+    mh_xfree(mp->m_path);
+    mh_xfree(mp->m_gname);
+    mh_xfree(mp->m_note);
+
+    free(mp);
 }
 
 
@@ -289,9 +279,9 @@ int
 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;
@@ -395,7 +385,8 @@ ismymbox (struct mailname *np)
 
            case UUCPHOST:
                if (strcasecmp (np->m_host, SystemName()))
-                   break;              /* fall */
+                   break;
+                   /* FALLTHRU */
            case LOCALHOST:
 local_test: ;
                if (!strcasecmp (np->m_mbox, mq.m_mbox))
@@ -413,7 +404,8 @@ local_test: ;
     for (mp = &mq; mp->m_next;) {
        mp = mp->m_next;
        if (!np->m_mbox)
-           continue; if ((len = strlen (cp = np->m_mbox))
+           continue;
+        if ((len = strlen (cp = np->m_mbox))
                < (i = strlen (pp = mp->m_mbox)))
            continue;
        switch (mp->m_type & W_MBOX) {