Improved the patch for send(1) to handle absolute path name arguments.
authormarkus schnalke <meillo@marmaro.de>
Wed, 8 Feb 2012 14:31:41 +0000 (15:31 +0100)
committermarkus schnalke <meillo@marmaro.de>
Wed, 8 Feb 2012 14:31:41 +0000 (15:31 +0100)
See changeset 3df5ab3c116e6d4a2fb4bb5cc9dfc5f781825815

uip/send.c

index bdcd83b..7a8b8e6 100644 (file)
@@ -62,12 +62,12 @@ extern char *distfile;
 int
 main(int argc, char **argv)
 {
-       int msgp = 0, msgp2 = 0, distsw = 0, vecp = 1;
+       int msgp = 0, nfiles = 0, distsw = 0, vecp = 1;
        int msgnum, status;
        char *cp, *maildir = NULL;
        char buf[BUFSIZ], **ap, **argp, **arguments;
        char *msgs[MAXARGS], *vec[MAXARGS];
-       char *msgs2[MAXARGS];
+       char *files[MAXARGS];
        struct msgs *mp;
        struct stat st;
 
@@ -148,7 +148,11 @@ main(int argc, char **argv)
 
                        }
                } else {
-                       msgs[msgp++] = cp;
+                       if (*cp == '/') {
+                               files[nfiles++] = cp;
+                       } else {
+                               msgs[msgp++] = cp;
+                       }
                }
        }
 
@@ -165,7 +169,7 @@ main(int argc, char **argv)
                }
        }
 
-       if (!msgp)
+       if (!msgp && !nfiles)
                msgs[msgp++] = seq_cur;
        maildir = toabsdir(draftfolder);
 
@@ -181,13 +185,7 @@ main(int argc, char **argv)
                adios(NULL, "no messages in draft folder %s", draftfolder);
 
        /* parse all the message ranges/sequences and set SELECTED */
-       msgp2 = 0;
        for (msgnum = 0; msgnum < msgp; msgnum++) {
-               if (*msgs[msgnum] == '/') {
-                       /* absolute path */
-                       msgs2[msgp2++] = msgs[msgnum];
-                       continue;
-               }
                if (!m_convert(mp, msgs[msgnum])) {
                        done(1);
                }
@@ -196,7 +194,7 @@ main(int argc, char **argv)
 
        for (msgp = 0, msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
                if (is_selected(mp, msgnum)) {
-                       msgs2[msgp2++] = getcpy(m_name(msgnum));
+                       files[nfiles++] = getcpy(m_name(msgnum));
                        unset_exists(mp, msgnum);
                }
        }
@@ -208,9 +206,9 @@ main(int argc, char **argv)
                if ((cp = context_find("signature")) && *cp)
                        m_putenv("SIGNATURE", cp);
 
-       for (msgnum = 0; msgnum < msgp2; msgnum++)
-               if (stat(msgs2[msgnum], &st) == NOTOK)
-                       adios(msgs2[msgnum], "unable to stat draft file");
+       for (msgnum = 0; msgnum < nfiles; msgnum++)
+               if (stat(files[msgnum], &st) == NOTOK)
+                       adios(files[msgnum], "unable to stat draft file");
 
        if ((annotext = getenv("mhannotate")) == NULL || *annotext == 0)
                annotext = NULL;
@@ -261,8 +259,8 @@ main(int argc, char **argv)
        vec[0] = mhbasename(postproc);
        closefds(3);
 
-       for (msgnum = 0; msgnum < msgp2; msgnum++) {
-               switch (sendsbr(vec, vecp, msgs2[msgnum], &st, 1)) {
+       for (msgnum = 0; msgnum < nfiles; msgnum++) {
+               switch (sendsbr(vec, vecp, files[msgnum], &st, 1)) {
                case DONE:
                        done(++status);
                case NOTOK: