Allow send(1) to send from folder other than +drafts
[mmh] / uip / send.c
index d7cf204..c1665b2 100644 (file)
@@ -81,7 +81,7 @@ main(int argc, char **argv)
        int msgnum, status;
        int in, out;
        int n;
-       char *cp, *maildir = NULL;
+       char *cp, *maildir = NULL, *folder = NULL;
        char buf[BUFSIZ], **argp, **arguments;
        char *msgs[MAXARGS], *vec[MAXARGS];
        char *files[MAXARGS];
@@ -125,6 +125,12 @@ main(int argc, char **argv)
                                vec[vecp++] = --cp;
                                continue;
                        }
+               } else if (*cp == '+' || *cp == '@') {
+                       if (folder) {
+                               adios(EX_USAGE, NULL, "only one folder at a time!");
+                       } else {
+                               folder = mh_xstrdup(expandfol(cp));
+                       }
                } else {
                        if (*cp == '/') {
                                files[nfiles++] = cp;
@@ -139,17 +145,18 @@ main(int argc, char **argv)
        }
 
        if (nmsgs) {
-               maildir = toabsdir(draftfolder);
+               folder = folder ? folder : draftfolder;
+               maildir = toabsdir(folder);
                if (chdir(maildir) == NOTOK) {
                        adios(EX_OSERR, maildir, "unable to change directory to");
                }
-               if (!(mp = folder_read(draftfolder))) {
-                       adios(EX_IOERR, NULL, "unable to read draft folder %s",
-                                       draftfolder);
+               if (!(mp = folder_read(folder))) {
+                       adios(EX_IOERR, NULL, "unable to read folder %s",
+                                       folder);
                }
                if (mp->nummsg == 0) {
-                       adios(EX_DATAERR, NULL, "no messages in draft folder %s",
-                                       draftfolder);
+                       adios(EX_DATAERR, NULL, "no messages in folder %s",
+                                       folder);
                }
                /* parse all the msgranges/sequences and set SELECTED */
                for (msgnum = 0; msgnum < nmsgs; msgnum++) {
@@ -162,7 +169,7 @@ main(int argc, char **argv)
                for (nmsgs = 0, msgnum = mp->lowsel;
                                msgnum <= mp->hghsel; msgnum++) {
                        if (is_selected(mp, msgnum)) {
-                               files[nfiles++] = getcpy(m_name(msgnum));
+                               files[nfiles++] = mh_xstrdup(m_name(msgnum));
                                unset_exists(mp, msgnum);
                        }
                }
@@ -196,7 +203,7 @@ main(int argc, char **argv)
                        adios(EX_IOERR, altmsg, "unable to open for reading");
                }
                fstat(in, &st2);
-               distfile = getcpy(m_mktemp2(NULL, invo_name, NULL, NULL));
+               distfile = mh_xstrdup(m_mktemp2(NULL, invo_name, NULL, NULL));
                if ((out = creat(distfile, (int)st2.st_mode & 0777))==NOTOK) {
                        adios(EX_IOERR, distfile, "unable to open for writing");
                }