Fixed places in the code relying the C99-ism of declarations in the
[mmh] / uip / mhlsbr.c
index 7abbf43..df0a223 100644 (file)
@@ -13,7 +13,7 @@
 #include <h/fmt_scan.h>
 #include <h/tws.h>
 #include <h/utils.h>
-#include <h/m_setjmp.h>
+#include <setjmp.h>
 #include <signal.h>
 #include <errno.h>
 #include <sys/wait.h>
@@ -223,6 +223,22 @@ static struct triple triples[] = {
     { NULL,            0,           0 }
 };
 
+static char *addrcomps[] = {
+    "from",
+    "sender",
+    "reply-to",
+    "to",
+    "cc",
+    "bcc",
+    "resent-from",
+    "resent-sender",
+    "resent-reply-to",
+    "resent-to",
+    "resent-cc",
+    "resent-bcc",
+    NULL
+};
+
 
 static int bellflg   = 0;
 static int clearflg  = 0;
@@ -240,6 +256,8 @@ static int issue = 0;
 static int exitstat = 0;
 static int mhldebug = 0;
 
+static int filesize = 0;
+
 #define        PITTY   (-1)
 #define        NOTTY   0
 #define        ISTTY   1
@@ -320,7 +338,7 @@ int
 mhl (int argc, char **argv)
 {
     int length = 0, nomore = 0;
-    unsigned int i, vecp = 0;;
+    unsigned int i, vecp = 0;
     int width = 0;
     char *cp, *folder = NULL, *form = NULL;
     char buf[BUFSIZ], *files[MAXARGS];
@@ -848,8 +866,9 @@ process (char *folder, char *fname, int ofilen, int ofilec)
     char *cp = NULL;
     FILE *fp = NULL;
     struct mcomp *c1;
+    struct stat st;
 
-    switch (m_setjmp (env)) {
+    switch (setjmp (env)) {
        case OK: 
            if (fname) {
                fp = mhl_action ? (*mhl_action) (fname) : fopen (fname, "r");
@@ -862,6 +881,11 @@ process (char *folder, char *fname, int ofilen, int ofilec)
                fname = "(stdin)";
                fp = stdin;
            }
+           if (fstat(fileno(fp), &st) == 0) {
+               filesize = st.st_size;
+           } else {
+               filesize = 0;
+           }
            cp = folder ? concat (folder, ":", fname, NULL) : getcpy (fname);
            if (ontty != PITTY)
                SIGNAL (SIGINT, intrser);
@@ -1112,7 +1136,7 @@ mcomp_format (struct mcomp *c1, struct mcomp *c2)
     c2->c_text = NULL;
     dat[0] = 0;
     dat[1] = 0;
-    dat[2] = 0;
+    dat[2] = filesize;
     dat[3] = sizeof(buffer) - 1;
     dat[4] = 0;
     fmt_compile (c1->c_nfs, &c1->c_fmt);
@@ -1143,13 +1167,8 @@ mcomp_format (struct mcomp *c1, struct mcomp *c2)
            p->pq_error = getcpy (error);
        } else {
            if ((c1->c_flags & FACEDFLT) && c2->c_face == NULL) {
-               char   *h, *o;
-               if ((h = mp->m_host) == NULL)
-                   h = LocalName (0);
-               if ((o = OfficialName (h)))
-                   h = o;
-               c2->c_face = concat ("address ", h, " ", mp->m_mbox,
-                                   NULL);
+               char *h = mp->m_host  ?  mp->m_host  :  LocalName (0);
+               c2->c_face = concat ("address ", h, " ", mp->m_mbox, NULL);
            }
            p->pq_text = getcpy (mp->m_text);
            mnfree (mp);
@@ -1561,11 +1580,7 @@ face_format (struct mcomp *c1)
 
     if ((cp = getname (cp))) {
        if ((mp = getm (cp, NULL, 0, AD_NAME, NULL))) {
-           char *h, *o;
-           if ((h = mp->m_host) == NULL)
-               h = LocalName (0);
-           if ((o = OfficialName (h)))
-               h = o;
+           char *h = mp->m_host  ?  mp->m_host  :  LocalName (0);
            c1->c_face = concat ("address ", h, " ", mp->m_mbox, NULL);
        }
 
@@ -1757,7 +1772,7 @@ mhlsbr (int argc, char **argv, FILE *(*action)())
     char *cp = NULL;
     struct mcomp *c1;
 
-    switch (m_setjmp (mhlenv)) {
+    switch (setjmp (mhlenv)) {
        case OK: 
            cp = invo_name;
            sleepsw = 0;        /* XXX */
@@ -1908,10 +1923,22 @@ compileargs (struct mcomp *c1, char *nfs)
 {
     struct format *fmt;
     struct arglist *args;
+    char **ap;
+    struct comp *cptr;
     unsigned int i;
 
     i = fmt_compile(nfs, &fmt);
 
+    /*
+     * Search through and mark any components that are address components
+     */
+
+    for (ap = addrcomps; *ap; ap++) {
+       FINDCOMP (cptr, *ap);
+       if (cptr)
+           cptr->c_type |= CT_ADDR;
+    }
+
     args = (struct arglist *) mh_xmalloc(sizeof(struct arglist));
 
     if (! args)
@@ -1972,9 +1999,7 @@ checkcomp(char *name, char *buf)
            if (mh_strcasecmp(name, c->c_name) == 0) {
                found++;
                if (! c->c_text) {
-                   i = strlen(c->c_text = strdup(buf)) - 1;
-                   if (c->c_text[i] == '\n')
-                       c->c_text[i] = '\0';
+                   c->c_text = strdup(buf);
                } else {
                    i = strlen(cp = c->c_text) - 1;
                    if (cp[i] == '\n') {