X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Ffolder_delmsgs.c;h=0636d119e64d80b5625ab03bdca5d7085bf0dfa7;hp=e6fac04fde08a880dc376cee351719cb7a1ef167;hb=a485ed478abbd599d8c9aab48934e7a26733ecb1;hpb=6c40d481d661d532dd527eaf34cebb6d3f8ed086 diff --git a/sbr/folder_delmsgs.c b/sbr/folder_delmsgs.c index e6fac04..0636d11 100644 --- a/sbr/folder_delmsgs.c +++ b/sbr/folder_delmsgs.c @@ -1,4 +1,3 @@ - /* * folder_delmsgs.c -- "remove" SELECTED messages from a folder * @@ -22,110 +21,110 @@ int folder_delmsgs (struct msgs *mp, int unlink_msgs, int nohook) { - pid_t pid; - int msgnum, vecp, retval = 0; - char buf[100], *dp, **vec; - char msgpath[BUFSIZ]; - - /* - * If "rmmproc" is defined, exec it to remove messages. - */ - if (rmmproc) { - /* Unset the EXISTS flag for each message to be removed */ - for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) { - if (is_selected (mp, msgnum)) - unset_exists (mp, msgnum); - } - - /* Mark that the sequence information has changed */ - mp->msgflags |= SEQMOD; + pid_t pid; + int msgnum, vecp, retval = 0; + char buf[100], *dp, **vec; + char msgpath[BUFSIZ]; + + /* + * If "rmmproc" is defined, exec it to remove messages. + */ + if (rmmproc) { + /* Unset the EXISTS flag for each message to be removed */ + for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) { + if (is_selected (mp, msgnum)) + unset_exists (mp, msgnum); + } - if (mp->numsel > MAXARGS - 2) - adios (NULL, "more than %d messages for %s exec", MAXARGS - 2, - rmmproc); - vec = (char **) calloc ((size_t) (mp->numsel + 2), sizeof(*vec)); - if (vec == NULL) - adios (NULL, "unable to allocate exec vector"); - vecp = 1; - for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) { - if (is_selected (mp, msgnum) && - !(vec[vecp++] = strdup (m_name (msgnum)))) - adios (NULL, "strdup failed"); - } - vec[vecp] = NULL; + /* Mark that the sequence information has changed */ + mp->msgflags |= SEQMOD; + + if (mp->numsel > MAXARGS - 2) + adios (NULL, "more than %d messages for %s exec", MAXARGS - 2, + rmmproc); + vec = (char **) calloc ((size_t) (mp->numsel + 2), sizeof(*vec)); + if (vec == NULL) + adios (NULL, "unable to allocate exec vector"); + vecp = 1; + for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) { + if (is_selected (mp, msgnum) && + !(vec[vecp++] = strdup (m_name (msgnum)))) + adios (NULL, "strdup failed"); + } + vec[vecp] = NULL; - fflush (stdout); - vec[0] = r1bindex (rmmproc, '/'); + fflush (stdout); + vec[0] = r1bindex (rmmproc, '/'); - switch (pid = vfork()) { - case -1: - advise ("fork", "unable to"); - return -1; + switch (pid = vfork()) { + case -1: + advise ("fork", "unable to"); + return -1; - case 0: - execvp (rmmproc, vec); - fprintf (stderr, "unable to exec "); - perror (rmmproc); - _exit (-1); + case 0: + execvp (rmmproc, vec); + fprintf (stderr, "unable to exec "); + perror (rmmproc); + _exit (-1); - default: - return (pidwait (pid, -1)); - } - } - - /* - * Either unlink or rename the SELECTED messages - */ - for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) { - if (is_selected (mp, msgnum)) { - /* unselect message */ - unset_selected (mp, msgnum); - mp->numsel--; - - /* - * Run the external hook on the message if one was specified in the context. - * All we have is the message number; we have changed to the directory - * containing the message. So, we need to extract that directory to form - * the complete path. Note that the caller knows the directory, but has - * no way of passing that to us. - */ - - if (!nohook) { - (void)snprintf(msgpath, sizeof (msgpath), "%s/%d", mp->foldpath, msgnum); - (void)ext_hook("del-hook", msgpath, (char *)0); + default: + return (pidwait (pid, -1)); } + } - dp = m_name (msgnum); - - if (unlink_msgs) { - /* just unlink the messages */ - if (unlink (dp) == -1) { - admonish (dp, "unable to unlink"); - retval = -1; - continue; - } - } else { - /* or rename messages with standard prefix */ - strncpy (buf, m_backup (dp), sizeof(buf)); - if (rename (dp, buf) == -1) { - admonish (buf, "unable to rename %s to", dp); - retval = -1; - continue; + /* + * Either unlink or rename the SELECTED messages + */ + for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) { + if (is_selected (mp, msgnum)) { + /* unselect message */ + unset_selected (mp, msgnum); + mp->numsel--; + + /* + * Run the external hook on the message if one was specified in the context. + * All we have is the message number; we have changed to the directory + * containing the message. So, we need to extract that directory to form + * the complete path. Note that the caller knows the directory, but has + * no way of passing that to us. + */ + + if (!nohook) { + (void)snprintf(msgpath, sizeof (msgpath), "%s/%d", mp->foldpath, msgnum); + (void)ext_hook("del-hook", msgpath, (char *)0); + } + + dp = m_name (msgnum); + + if (unlink_msgs) { + /* just unlink the messages */ + if (unlink (dp) == -1) { + admonish (dp, "unable to unlink"); + retval = -1; + continue; + } + } else { + /* or rename messages with standard prefix */ + strncpy (buf, m_backup (dp), sizeof(buf)); + if (rename (dp, buf) == -1) { + admonish (buf, "unable to rename %s to", dp); + retval = -1; + continue; + } + } + + /* If removal was successful, decrement message count */ + unset_exists (mp, msgnum); + mp->nummsg--; } - } - - /* If removal was successful, decrement message count */ - unset_exists (mp, msgnum); - mp->nummsg--; } - } - /* Sanity check */ - if (mp->numsel != 0) + /* Sanity check */ + if (mp->numsel != 0) adios (NULL, "oops, mp->numsel should be 0"); - /* Mark that the sequence information has changed */ - mp->msgflags |= SEQMOD; + /* Mark that the sequence information has changed */ + mp->msgflags |= SEQMOD; - return retval; + return retval; }