Fixed another weird bug caused by the static mailpath being overwritten.
[mmh] / uip / inc.c
index 7886411..864574b 100644 (file)
--- a/uip/inc.c
+++ b/uip/inc.c
@@ -134,8 +134,6 @@ static struct swit switches[] = {
     { NULL, 0 }
 };
 
-extern int errno;
-
 /*
  * flags for the mail source
  */
@@ -245,6 +243,8 @@ main (int argc, char **argv)
     struct msgs *mp;
     struct stat st, s1;
     FILE *aud = NULL;
+    char       b[MAXPATHLEN + 1];
+    char       *maildir_copy;          /* copy of mail directory because the static gets overwritten */
 
 #ifdef POP
     int nmsgs, nbytes, p = 0;
@@ -534,6 +534,11 @@ main (int argc, char **argv)
        }
        if (stat (newmail, &s1) == NOTOK || s1.st_size == 0)
            adios (NULL, "no mail to incorporate");
+
+       if ((cp = strdup(newmail)) == (char *)0)
+           adios (maildir, "error allocating memory to copy newmail");
+
+       newmail = cp;
     }
 
 #ifdef POP
@@ -548,6 +553,9 @@ main (int argc, char **argv)
        folder = getfolder (0);
     maildir = m_maildir (folder);
 
+    if ((maildir_copy = strdup(maildir)) == (char *)0)
+        adios (maildir, "error allocating memory to copy maildir");
+
     if (stat (maildir, &st) == NOTOK) {
        if (errno != ENOENT)
            adios (maildir, "error on folder");
@@ -802,7 +810,6 @@ go_to_it:
            /* link message into folder */
            newmsg = folder_addmsg(mp, tmpfilenam);
 #endif
-
            /* create scanline for new message */
            switch (i = scan (in, msgnum + 1, msgnum + 1, nfs, width,
                              msgnum == hghnum && chgflag, 1, NULL, 0L, noisy)) {
@@ -826,6 +833,13 @@ go_to_it:
 
            case SCNMSG:
            case SCNENC:
+               /*
+                *  Run the external program hook on the message.
+                */
+
+               (void)snprintf(b, sizeof (b), "%s/%d", maildir_copy, msgnum + 1);
+               (void)ext_hook("add-hook", b, (char *)0);
+
                if (aud)
                    fputs (scanl, aud);
 #ifdef MHE
@@ -837,6 +851,9 @@ go_to_it:
 
                msgnum++;
                mp->hghmsg++;
+               mp->nummsg++;
+               if (mp->lowmsg == 0) mp->lowmsg = 1;
+
                clear_msg_flags (mp, msgnum);
                set_exists (mp, msgnum);
                set_unseen (mp, msgnum);