{
pid_t pid;
int msgnum, vecp, retval = 0;
- char buf[100], *dp, **vec;
+ char buf[100], *dp, **vec, *prog;
char msgpath[BUFSIZ];
/*
/* 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))))
vec[vecp] = NULL;
fflush (stdout);
- vec[0] = r1bindex (rmmproc, '/');
switch (pid = vfork()) {
case -1:
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));
}
}
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);
*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:
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);
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);