Fixed make_bcc_file () to use contents of From: in draft, if draft_from masquerade...
[mmh] / uip / sortm.c
index 5cff943..5888d78 100644 (file)
@@ -11,6 +11,7 @@
 
 #include <h/mh.h>
 #include <h/tws.h>
+#include <h/utils.h>
 
 /*
  * We allocate space for messages (msgs array)
@@ -99,8 +100,7 @@ main (int argc, char **argv)
      */
     nummsgs = 0;
     maxmsgs = MAXMSGS;
-    if (!(msgs = (char **) malloc ((size_t) (maxmsgs * sizeof(*msgs)))))
-       adios (NULL, "unable to allocate storage");
+    msgs = (char **) mh_xmalloc ((size_t) (maxmsgs * sizeof(*msgs)));
 
     /*
      * Parse arguments
@@ -182,9 +182,8 @@ main (int argc, char **argv)
             */
            if (nummsgs >= maxmsgs) {
                maxmsgs += MAXMSGS;
-               if (!(msgs = (char **) realloc (msgs,
-                       (size_t) (maxmsgs * sizeof(*msgs)))))
-                   adios (NULL, "unable to reallocate msgs storage");
+               msgs = (char **) mh_xrealloc (msgs,
+                    (size_t) (maxmsgs * sizeof(*msgs)));
            }
            msgs[nummsgs++] = cp;
        }
@@ -223,9 +222,7 @@ main (int argc, char **argv)
     /*
      * sort a list of pointers to our "messages to be sorted".
      */
-    dlist = (struct smsg **) malloc ((nmsgs+1) * sizeof(*dlist));
-    if (! dlist)
-       adios (NULL, "couldn't allocate sort memory");
+    dlist = (struct smsg **) mh_xmalloc ((nmsgs+1) * sizeof(*dlist));
     for (i = 0; i < nmsgs; i++)
        dlist[i] = &smsgs[i];
     dlist[nmsgs] = 0;
@@ -252,9 +249,7 @@ main (int argc, char **argv)
        struct smsg **slist, **flist;
        register struct smsg ***il, **fp, **dp;
 
-       slist = (struct smsg **) malloc ((nmsgs+1) * sizeof(*slist));
-       if (! slist)
-           adios (NULL, "couldn't allocate sort memory");
+       slist = (struct smsg **) mh_xmalloc ((nmsgs+1) * sizeof(*slist));
        memcpy((char *)slist, (char *)dlist, (nmsgs+1)*sizeof(*slist));
        qsort((char *)slist, nmsgs, sizeof(*slist), (qsort_comp) subsort);
 
@@ -272,9 +267,7 @@ main (int argc, char **argv)
         * make up the final list, chronological but with
         * all the same subjects grouped together.
         */
-       flist = (struct smsg **) malloc ((nmsgs+1) * sizeof(*flist));
-       if (! flist)
-           adios (NULL, "couldn't allocate msg list");
+       flist = (struct smsg **) mh_xmalloc ((nmsgs+1) * sizeof(*flist));
        fp = flist;
        for (dp = dlist; *dp;) {
            register struct smsg **s = il[(*dp++)->s_msg];
@@ -443,24 +436,23 @@ get_fields (char *datesw, int msg, struct smsg *smsg)
 
            cp = subjcomp;
            cp2 = subjcomp;
-           if (strcmp (subjsort, "subject") == 0)
+           if (strcmp (subjsort, "subject") == 0) {
                while ((c = *cp)) {
                    if (! isspace(c)) {
                        if(uprf(cp, "re:"))
                            cp += 2;
-                       else {
-                           if (isalnum(c))
-                               *cp2++ = isupper(c) ? tolower(c) : c;
+                       else
                            break;
-                       }
                    }
                    cp++;
                }
+           }
+
            while ((c = *cp++)) {
                if (isalnum(c))
                    *cp2++ = isupper(c) ? tolower(c) : c;
-
            }
+
            *cp2 = '\0';
        }
        else
@@ -535,13 +527,13 @@ rename_chain (struct msgs *mp, struct smsg **mlist, int msg, int endmsg)
        if (verbose)
            printf ("message %d becomes message %d\n", old, new);
 
-       if (rename (oldname, newname) == NOTOK)
-           adios (newname, "unable to rename %s to", oldname);
-
        (void)snprintf(oldname, sizeof (oldname), "%s/%d", mp->foldpath, old);
        (void)snprintf(newbuf, sizeof (newbuf), "%s/%d", mp->foldpath, new);
        ext_hook("ref-hook", oldname, newbuf);
 
+       if (rename (oldname, newname) == NOTOK)
+           adios (newname, "unable to rename %s to", oldname);
+
        copy_msg_flags (mp, new, old);
        if (mp->curmsg == old)
            seq_setcur (mp, new);
@@ -586,24 +578,22 @@ rename_msgs (struct msgs *mp, struct smsg **mlist)
        if (verbose)
            printf ("renaming message chain from %d to %d\n", old, new);
 
-       if (rename (f1, tmpfil) == NOTOK)
-           adios (tmpfil, "unable to rename %s to ", f1);
-
        /*
-        *      Run the external hook to refile the old message as message
-        *      number 2147483647.  This is our way of making a temporary
-        *      message number.  I don't really like this.
+        *      Run the external hook to refile the old message as the
+        *      temporary message number that is off of the end of the
+        *      messages in the folder.
         */
 
        (void)snprintf(f1, sizeof (f1), "%s/%d", mp->foldpath, old);
-       (void)snprintf(newbuf, sizeof (newbuf), "%s/2147483647", mp->foldpath);
+       (void)snprintf(newbuf, sizeof (newbuf), "%s/%d", mp->foldpath, mp->hghmsg + 1);
        ext_hook("ref-hook", f1, newbuf);
 
+       if (rename (f1, tmpfil) == NOTOK)
+           adios (tmpfil, "unable to rename %s to ", f1);
+
        get_msg_flags (mp, &tmpset, old);
 
        rename_chain (mp, mlist, j, i);
-       if (rename (tmpfil, m_name(new)) == NOTOK)
-           adios (m_name(new), "unable to rename %s to", tmpfil);
 
        /*
         *      Run the external hook to refile the temorary message number
@@ -613,6 +603,9 @@ rename_msgs (struct msgs *mp, struct smsg **mlist)
        (void)snprintf(f1, sizeof (f1), "%s/%d", mp->foldpath, new);
        ext_hook("ref-hook", newbuf, f1);
 
+       if (rename (tmpfil, m_name(new)) == NOTOK)
+           adios (m_name(new), "unable to rename %s to", tmpfil);
+
        set_msg_flags (mp, &tmpset, new);
        mp->msgflags |= SEQMOD;
     }