- /* check if this is the current message */
- if (msgnum == mp->curmsg)
- newcurrent = hole;
-
- /* copy the attribute flags for this message */
- copy_msg_flags (mp, hole, msgnum);
-
- if (msgnum == mp->lowsel)
- mp->lowsel = hole;
- if (msgnum == mp->hghsel)
- mp->hghsel = hole;
-
- /* mark that sequence information has been modified */
- mp->msgflags |= SEQMOD;
- }
- hole++;
+ for (msgnum = mp->lowmsg, hole = 1; msgnum <= mp->hghmsg; msgnum++) {
+ if (does_exist(mp, msgnum)) {
+ if (msgnum != hole) {
+ strncpy(newmsg, m_name(hole), sizeof(newmsg));
+ strncpy(oldmsg, m_name(msgnum), sizeof(oldmsg));
+ 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.
+ */
+
+ snprintf(oldmsg, sizeof (oldmsg), "%s/%d",
+ mp->foldpath, msgnum);
+ 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;
+
+ /* copy the attribute flags for this message */
+ copy_msg_flags(mp, hole, msgnum);
+
+ if (msgnum == mp->lowsel)
+ mp->lowsel = hole;
+ if (msgnum == mp->hghsel)
+ mp->hghsel = hole;
+
+ /*
+ ** mark that sequence information has
+ ** been modified
+ */
+ mp->msgflags |= SEQMOD;
+ }
+ hole++;
+ }