Fixed problem where the refile hook was being called after a message was
authorJon Steinhart <jon@fourwinds.com>
Tue, 16 Nov 2004 18:14:34 +0000 (18:14 +0000)
committerJon Steinhart <jon@fourwinds.com>
Tue, 16 Nov 2004 18:14:34 +0000 (18:14 +0000)
renamed so that it wasn't around for the hook.  The hook is now called
before the message file is renamed.

sbr/folder_pack.c

index bebc145..2bddb0d 100644 (file)
@@ -53,20 +53,22 @@ folder_pack (struct msgs **mpp, int verbose)
                if (verbose)
                    printf ("message %s becomes %s\n", oldmsg, newmsg);
 
-               /* move the message file */
-               if (rename (oldmsg, newmsg) == -1) {
-                   advise (newmsg, "unable to rename %s to", oldmsg);
-                   return -1;
-               }
-
                /*
                 * 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);
+                   return -1;
+               }
+
                /* check if this is the current message */
                if (msgnum == mp->curmsg)
                    newcurrent = hole;