]> diplodocus.org Git - nmh/commitdiff
More changes to use argsplit() for helper programs.
authorKen Hornstein <kenh@pobox.com>
Wed, 30 Jan 2013 20:47:32 +0000 (15:47 -0500)
committerKen Hornstein <kenh@pobox.com>
Wed, 30 Jan 2013 20:47:32 +0000 (15:47 -0500)
sbr/folder_delmsgs.c
uip/post.c
uip/sendsbr.c

index c1416a6fb8557ea1ea5b094be18af962703b56ad..671ecc7cc5bc1a473cd40489b7335fad702071bb 100644 (file)
@@ -24,7 +24,7 @@ folder_delmsgs (struct msgs *mp, int unlink_msgs, int nohook)
 {
     pid_t pid;
     int msgnum, vecp, retval = 0;
-    char buf[100], *dp, **vec;
+    char buf[100], *dp, **vec, *prog;
     char       msgpath[BUFSIZ];
 
     /*
@@ -40,10 +40,18 @@ folder_delmsgs (struct msgs *mp, int unlink_msgs, int nohook)
        /* Mark that the sequence information has changed */
        mp->msgflags |= SEQMOD;
 
-       vec = (char **) calloc ((size_t) (mp->numsel + 2), sizeof(*vec));
+       vec = argsplit(rmmproc, &prog, &vecp);
+
+       /*
+        * argsplit allocates a MAXARGS vector by default,  If we need
+        * something bigger, allocate it ourselves
+        */
+
+       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");
-       vecp = 1;
        for (msgnum = mp->lowsel; msgnum <= mp->hghsel; msgnum++) {
            if (is_selected (mp, msgnum) &&
                !(vec[vecp++] = strdup (m_name (msgnum))))
@@ -52,7 +60,6 @@ folder_delmsgs (struct msgs *mp, int unlink_msgs, int nohook)
        vec[vecp] = NULL;
 
        fflush (stdout);
-       vec[0] = r1bindex (rmmproc, '/');
 
        switch (pid = vfork()) {
        case -1:
@@ -60,12 +67,13 @@ folder_delmsgs (struct msgs *mp, int unlink_msgs, int nohook)
            return -1;
 
        case 0:
-           execvp (rmmproc, vec);
+           execvp (prog, vec);
            fprintf (stderr, "unable to exec ");
            perror (rmmproc);
            _exit (-1);
 
        default:
+           arglist_free(prog, vec);
            return (pidwait (pid, -1));
        }
     }
index 59a8c8b4e8d41d25263dc05f45bb414df3525e88..7bed6f8a70e0a47512dec02a7472bde15816248a 100644 (file)
@@ -1787,8 +1787,9 @@ static void
 fcc (char *file, char *folder)
 {
     pid_t child_id;
-    int i, status;
+    int i, status, argp;
     char fold[BUFSIZ];
+    char **arglist, *program;
 
     if (verbose)
        printf ("  %sFcc %s: ", msgstate == RESENT ? "Resent-" : "", folder);
@@ -1811,8 +1812,14 @@ fcc (char *file, char *folder)
                    *folder == '+' || *folder == '@' ? "" : "+", folder);
 
            /* now exec the fileproc */
-           execlp (fileproc, r1bindex (fileproc, '/'),
-                   "-link", "-file", file, fold, NULL);
+
+           arglist = argsplit(fileproc, &program, &argp);
+           arglist[argp++] = "-link";
+           arglist[argp++] = "-file";
+           arglist[argp++] = file;
+           arglist[argp++] = fold;
+           arglist[argp] = NULL;
+           execvp (program, arglist);
            _exit (-1);
 
        default: 
index 06358fd38e76e7e7c44b6d6534b98043027278ff..2350ccf4bddefd9210272946f9ac0dd74b930cfa 100644 (file)
@@ -908,8 +908,10 @@ static void
 alert (char *file, int out)
 {
     pid_t child_id;
-    int i, in;
+    int i, in, argp;
     char buf[BUFSIZ];
+    char *program;
+    char **arglist;
 
     for (i = 0; (child_id = fork()) == NOTOK && i < 5; i++)
        sleep (5);
@@ -949,8 +951,14 @@ alert (char *file, int out)
            snprintf (buf, sizeof(buf), "send failed on %s",
                        forwsw ? "enclosed draft" : file);
 
-           execlp (mailproc, r1bindex (mailproc, '/'), getusername (),
-                   "-subject", buf, NULL);
+           arglist = argsplit(mailproc, &program, &argp);
+
+           arglist[argp++] = getusername();
+           arglist[argp++] = "-subject";
+           arglist[argp++] = buf;
+           arglist[argp] = NULL;
+
+           execvp (program, arglist);
            fprintf (stderr, "unable to exec ");
            perror (mailproc);
            _exit (-1);