X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/f1722de88a9d80bc4aa8e787eee942a1c3fbb702..9322ba2854211794c27fae9468768b80b767c211:/sbr/folder_delmsgs.c diff --git a/sbr/folder_delmsgs.c b/sbr/folder_delmsgs.c index 671ecc7c..94aa29ce 100644 --- a/sbr/folder_delmsgs.c +++ b/sbr/folder_delmsgs.c @@ -8,6 +8,7 @@ */ #include +#include /* * 1) If we are using an external rmmproc, then exec it. @@ -40,6 +41,14 @@ folder_delmsgs (struct msgs *mp, int unlink_msgs, int nohook) /* Mark that the sequence information has changed */ mp->msgflags |= SEQMOD; + /* + * Write out the sequence and context files; this will release + * any locks before the rmmproc is called. + */ + + seq_save (mp); + context_save (); + vec = argsplit(rmmproc, &prog, &vecp); /* @@ -48,10 +57,7 @@ folder_delmsgs (struct msgs *mp, int unlink_msgs, int nohook) */ if (mp->numsel + vecp + 1 > MAXARGS) - vec = (char **) realloc (vec, (size_t) ((mp->numsel + vecp + 1) * - sizeof(*vec))); - if (vec == NULL) - adios (NULL, "unable to allocate exec vector"); + vec = mh_xrealloc(vec, (mp->numsel + vecp + 1) * sizeof *vec); for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) { if (is_selected (mp, msgnum) && !(vec[vecp++] = strdup (m_name (msgnum)))) @@ -61,7 +67,7 @@ folder_delmsgs (struct msgs *mp, int unlink_msgs, int nohook) fflush (stdout); - switch (pid = vfork()) { + switch (pid = fork()) { case -1: advise ("fork", "unable to"); return -1; @@ -97,14 +103,14 @@ folder_delmsgs (struct msgs *mp, int unlink_msgs, int nohook) if (!nohook) { (void)snprintf(msgpath, sizeof (msgpath), "%s/%d", mp->foldpath, msgnum); - (void)ext_hook("del-hook", msgpath, (char *)0); + (void)ext_hook("del-hook", msgpath, NULL); } dp = m_name (msgnum); if (unlink_msgs) { /* just unlink the messages */ - if (unlink (dp) == -1) { + if (m_unlink (dp) == -1) { admonish (dp, "unable to unlink"); retval = -1; continue; @@ -132,5 +138,12 @@ folder_delmsgs (struct msgs *mp, int unlink_msgs, int nohook) /* Mark that the sequence information has changed */ mp->msgflags |= SEQMOD; + /* + * Write out sequence and context files + */ + + seq_save (mp); + context_save (); + return retval; }