int sc_width(void);
int build_form (char *, char *, int *, char *, char *, char *, char *,
char *, char *);
-int sendsbr (char **, int, char *, struct stat *, int, char *, int);
+int sendsbr (char **, int, char *, char *, struct stat *, int, char *, int);
int SOprintf (char *, ...);
int what_now (char *, int, int, char *, char *,
int, struct msgs *, char *, int, char *, int);
int
main (int argc, char **argv)
{
- int msgp = 0, distsw = 0, vecp = 1;
+ int msgp = 0, distsw = 0, vecp;
int isdf = 0, mime = 0;
int msgnum, status;
char *cp, *dfolder = NULL, *maildir = NULL;
- char buf[BUFSIZ], **ap, **argp, **arguments;
- char *msgs[MAXARGS], *vec[MAXARGS];
+ char buf[BUFSIZ], **ap, **argp, **arguments, *program;
+ char *msgs[MAXARGS], **vec;
struct msgs *mp;
struct stat st;
char *attach = NMH_ATTACH_HEADER; /* header field name for attachments */
arguments = getarguments (invo_name, argc, argv, 1);
argp = arguments;
+ vec = argsplit(postproc, &program, &vecp);
+
vec[vecp++] = "-library";
vec[vecp++] = getcpy (m_maildir (""));
push ();
status = 0;
- vec[0] = r1bindex (postproc, '/');
closefds (3);
for (msgnum = 0; msgnum < msgp; msgnum++) {
- switch (sendsbr (vec, vecp, msgs[msgnum], &st, 1, attach,
+ switch (sendsbr (vec, vecp, program, msgs[msgnum], &st, 1, attach,
attachformat)) {
case DONE:
done (++status);
/*
* external prototypes
*/
-int sendsbr (char **, int, char *, struct stat *, int, char *, int);
+int sendsbr (char **, int, char *, char *, struct stat *, int, char *, int);
char *getusername (void);
/*
static int tmp_fd (void);
static void anno (int, struct stat *);
static void annoaux (int);
-static int splitmsg (char **, int, char *, struct stat *, int);
-static int sendaux (char **, int, char *, struct stat *);
+static int splitmsg (char **, int, char *, char *, struct stat *, int);
+static int sendaux (char **, int, char *, char *, struct stat *);
static int attach(char *, char *, int);
static void clean_up_temporary_files(void);
*/
int
-sendsbr (char **vec, int vecp, char *drft, struct stat *st, int rename_drft, char *attachment_header_field_name, int attachformat)
+sendsbr (char **vec, int vecp, char *program, char *drft, struct stat *st,
+ int rename_drft, char *attachment_header_field_name, int attachformat)
{
int status;
char buffer[BUFSIZ], file[BUFSIZ];
*/
if (splitsw >= 0 && !distfile && stat (drft, &sts) != NOTOK
&& sts.st_size >= CPERMSG) {
- status = splitmsg (vec, vecp, drft, st, splitsw) ? NOTOK : OK;
+ status = splitmsg (vec, vecp, program, drft, st, splitsw) ? NOTOK : OK;
} else {
- status = sendaux (vec, vecp, drft, st) ? NOTOK : OK;
+ status = sendaux (vec, vecp, program, drft, st) ? NOTOK : OK;
}
/* rename the original draft */
*/
static int
-splitmsg (char **vec, int vecp, char *drft, struct stat *st, int delay)
+splitmsg (char **vec, int vecp, char *program, char *drft,
+ struct stat *st, int delay)
{
int compnum, nparts, partno, state, status;
long pos, start;
free (dp);
fclose (in);
- return sendaux (vec, vecp, drft, st);
+ return sendaux (vec, vecp, program, drft, st);
}
if (!pushsw) {
}
snprintf (partnum, sizeof(partnum), "%d", partno);
- status = sendaux (vec, vecp, tmpdrf, st);
+ status = sendaux (vec, vecp, program, tmpdrf, st);
unlink (tmpdrf);
if (status != OK)
break;
/*
* Annotate original message, and
- * call `postproc' to send message.
+ * call `postproc' (which is passed down in "program") to send message.
*/
static int
-sendaux (char **vec, int vecp, char *drft, struct stat *st)
+sendaux (char **vec, int vecp, char *program, char *drft, struct stat *st)
{
pid_t child_id;
int i, status, fd, fd2;
dup2 (fd, fileno (stderr));
close (fd);
}
- execvp (postproc, vec);
+ execvp (program, vec);
fprintf (stderr, "unable to exec ");
perror (postproc);
_exit (-1);
via_mail (char *mailsw, char *subjsw, char *parmsw, char *descsw,
char *cmntsw, int delay, char *fromsw)
{
- int status, vecp = 1;
- char tmpfil[BUFSIZ];
- char *vec[MAXARGS];
+ int status, vecp;
+ char tmpfil[BUFSIZ], *program;
+ char **vec;
struct stat st;
FILE *fp;
char *tfile = NULL;
splitsw = delay;
status = 0;
- vec[0] = r1bindex (postproc, '/');
+
+ vec = argsplit(postproc, &program, &vecp);
if (verbsw)
vec[vecp++] = "-verbose";
- switch (sendsbr (vec, vecp, tmpfil, &st, 0, (char *)0, 0)) {
+ switch (sendsbr (vec, vecp, program, tmpfil, &st, 0, (char *)0, 0)) {
case DONE:
case NOTOK:
status++;
sendit (char *sp, char **arg, char *file, int pushed)
{
int vecp, n = 1;
- char *cp, buf[BUFSIZ], **argp;
- char **arguments, *vec[MAXARGS];
+ char *cp, buf[BUFSIZ], **argp, *program;
+ char **arguments, *savearg[MAXARGS], **vec;
struct stat st;
char *attach = NMH_ATTACH_HEADER;/* attachment header field name */
int attachformat = 1; /* mhbuild format specifier for
/*
* Make sure these are defined. In particular, we need
- * vec[1] to be NULL, in case "arg" is NULL below. It
- * doesn't matter what is the value of vec[0], but we
+ * savearg[1] to be NULL, in case "arg" is NULL below. It
+ * doesn't matter what is the value of savearg[0], but we
* set it to NULL, to help catch "off-by-one" errors.
*/
- vec[0] = NULL;
- vec[1] = NULL;
+ savearg[0] = NULL;
+ savearg[1] = NULL;
/*
- * Temporarily copy arg to vec, since the brkstring() call in
+ * Temporarily copy arg to savearg, since the brkstring() call in
* getarguments() will wipe it out before it is merged in.
- * Also, we skip the first element of vec, since getarguments()
+ * Also, we skip the first element of savearg, since getarguments()
* skips it. Then we count the number of arguments
* copied. The value of "n" will be one greater than
* this in order to simulate the standard argc/argv.
if (arg) {
char **bp;
- copyip (arg, vec+1, MAXARGS-1);
- bp = vec+1;
+ copyip (arg, savearg+1, MAXARGS-1);
+ bp = savearg+1;
while (*bp++)
n++;
}
/*
- * Merge any arguments from command line (now in vec)
+ * Merge any arguments from command line (now in savearg)
* and arguments from profile.
*/
- arguments = getarguments (sp, n, vec, 1);
+ arguments = getarguments (sp, n, savearg, 1);
argp = arguments;
debugsw = 0;
annotext = NULL;
distfile = NULL;
- vecp = 1; /* we'll get the zero'th element later */
+ /*
+ * Get our initial arguments for postproc now
+ */
+
+ vec = argsplit(postproc, &program, &vecp);
+
vec[vecp++] = "-library";
vec[vecp++] = getcpy (m_maildir (""));
if ((pushsw = pushed))
push ();
- vec[0] = r1bindex (postproc, '/');
closefds (3);
- if (sendsbr (vec, vecp, file, &st, 1, attach, attachformat) == OK)
+ if (sendsbr (vec, vecp, program, file, &st, 1, attach, attachformat) == OK)
done (0);
}