remove unused defines in uip/pick.c
[mmh] / sbr / folder_delmsgs.c
index 0636d11..3165883 100644 (file)
 /*
- * folder_delmsgs.c -- "remove" SELECTED messages from a folder
- *
- * 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.
- */
-
+** folder_delmsgs.c -- remove (= unlink) SELECTED messages from a folder
+**
+** 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 <sysexits.h>
+#include <unistd.h>
 #include <h/mh.h>
 
 /*
- * 1) If we are using an external rmmproc, then exec it.
- * 2) Else if unlink_msgs is non-zero, then unlink the
- *    SELECTED messages.
- * 3) Else rename SELECTED messages by prefixing name
- *    with backup_prefix.
- *
- * If there is an error, return -1, else return 0.
- */
-
+** Unlink the SELECTED messages.
+**
+** If there is an error, return -1, else return 0.
+*/
 int
-folder_delmsgs (struct msgs *mp, int unlink_msgs, int nohook)
+folder_delmsgs(struct msgs *mp, int hook)
 {
-       pid_t pid;
-       int msgnum, vecp, retval = 0;
-       char buf[100], *dp, **vec;
+       int msgnum, retval = 0;
        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;
-
-               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");
+       for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
+               if (!is_selected(mp, msgnum)) {
+                       continue;
                }
-               vec[vecp] = NULL;
 
-               fflush (stdout);
-               vec[0] = r1bindex (rmmproc, '/');
+               /* unselect message */
+               unset_selected(mp, msgnum);
 
-               switch (pid = vfork()) {
-               case -1:
-                       advise ("fork", "unable to");
-                       return -1;
+               snprintf(msgpath, sizeof (msgpath), "%s/%d",
+                               mp->foldpath, msgnum);
 
-               case 0:
-                       execvp (rmmproc, vec);
-                       fprintf (stderr, "unable to exec ");
-                       perror (rmmproc);
-                       _exit (-1);
-
-               default:
-                       return (pidwait (pid, -1));
+               if (hook) {
+                       /* Run the external hook on the message. */
+                       ext_hook("del-hook", msgpath, NULL);
                }
-       }
 
-       /*
-        * 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--;
+               /* just unlink the messages */
+               if (unlink(msgpath) == -1) {
+                       admonish(msgpath, "unable to unlink");
+                       retval = -1;
+                       continue;
                }
+
+               /* If removal was successful, decrement message count */
+               unset_exists(mp, msgnum);
+               mp->nummsg--;
        }
 
        /* Sanity check */
        if (mp->numsel != 0)
-       adios (NULL, "oops, mp->numsel should be 0");
+               adios(EX_SOFTWARE, NULL, "oops, mp->numsel should be 0");
 
        /* Mark that the sequence information has changed */
        mp->msgflags |= SEQMOD;