]> diplodocus.org Git - nmh/blobdiff - sbr/folder_pack.c
crawl_folders.h: Base header on implementation.
[nmh] / sbr / folder_pack.c
index 05365a86a3a3b29a2a9c250f5a908c308ae7c5e1..ba84d1f7f01435dd246612a19a05ff85c6b19bb5 100644 (file)
@@ -1,12 +1,18 @@
-
-/*
- * folder_pack.c -- pack (renumber) the messages in a folder
+/* folder_pack.c -- pack (renumber) the messages in a folder
  *               -- into a contiguous range from 1 to n.
  *
  *               -- into a contiguous range from 1 to n.
  *
- * $Id$
+ * This code is Copyright (c) 2002, by the authors of nmh.  See the
+ * COPYRIGHT file in the root directory of the nmh distribution for
+ * complete copyright information.
  */
 
  */
 
-#include <h/mh.h>
+#include "h/mh.h"
+#include "m_name.h"
+#include "seq_setcur.h"
+#include "ext_hook.h"
+#include "folder_realloc.h"
+#include "folder_pack.h"
+#include "error.h"
 
 /*
  * Pack the message in a folder.
 
 /*
  * Pack the message in a folder.
@@ -33,12 +39,11 @@ folder_pack (struct msgs **mpp, int verbose)
      * for all numbers from 1 to current high message.
      */
     if (mp->lowoff > 1) {
      * for all numbers from 1 to current high message.
      */
     if (mp->lowoff > 1) {
-       if ((mp = folder_realloc (mp, 1, mp->hghmsg)))
-           *mpp = mp;
-       else {
-           advise (NULL, "unable to allocate folder storage");
+       if (!(mp = folder_realloc(mp, 1, mp->hghmsg))) {
+           inform("unable to allocate folder storage");
            return -1;
        }
            return -1;
        }
+        *mpp = mp;
     }
 
     for (msgnum = mp->lowmsg, hole = 1; msgnum <= mp->hghmsg; msgnum++) {
     }
 
     for (msgnum = mp->lowmsg, hole = 1; msgnum <= mp->hghmsg; msgnum++) {
@@ -49,6 +54,16 @@ folder_pack (struct msgs **mpp, int verbose)
                if (verbose)
                    printf ("message %s becomes %s\n", oldmsg, newmsg);
 
                if (verbose)
                    printf ("message %s becomes %s\n", oldmsg, newmsg);
 
+               /*
+                * Invoke the external refile hook for each message being renamed.
+                * This is done before the file is renamed so that the old message
+                * file is around for the hook.
+                */
+
+               (void)snprintf(oldmsg, sizeof (oldmsg), "%s/%d", mp->foldpath, msgnum);
+               (void)snprintf(newmsg, sizeof (newmsg), "%s/%d", mp->foldpath, hole);
+               ext_hook("ref-hook", oldmsg, newmsg);
+
                /* move the message file */
                if (rename (oldmsg, newmsg) == -1) {
                    advise (newmsg, "unable to rename %s to", oldmsg);
                /* move the message file */
                if (rename (oldmsg, newmsg) == -1) {
                    advise (newmsg, "unable to rename %s to", oldmsg);