From: Ken Hornstein Date: Thu, 7 Feb 2013 19:34:12 +0000 (-0500) Subject: More conversion to argsplit(). X-Git-Url: https://diplodocus.org/git/nmh/commitdiff_plain/4e3c586d24d33c0d0f6b1f16a84cf9b1a08076d7?hp=3955f98d7b4f7803e3cb766f89064c2da7c50a58 More conversion to argsplit(). --- diff --git a/h/prototypes.h b/h/prototypes.h index 376968ab..3f2caee8 100644 --- a/h/prototypes.h +++ b/h/prototypes.h @@ -172,7 +172,7 @@ int sc_length(void); 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); diff --git a/uip/send.c b/uip/send.c index 1bfd0608..7c082785 100644 --- a/uip/send.c +++ b/uip/send.c @@ -114,12 +114,12 @@ extern char *distfile; 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 */ @@ -136,6 +136,8 @@ main (int argc, char **argv) arguments = getarguments (invo_name, argc, argv, 1); argp = arguments; + vec = argsplit(postproc, &program, &vecp); + vec[vecp++] = "-library"; vec[vecp++] = getcpy (m_maildir ("")); @@ -443,11 +445,10 @@ go_to_it: 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); diff --git a/uip/sendsbr.c b/uip/sendsbr.c index 3bc3df15..e3a8195f 100644 --- a/uip/sendsbr.c +++ b/uip/sendsbr.c @@ -46,7 +46,7 @@ static FILE *composition_file; /* composition file pointer */ /* * 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); /* @@ -57,8 +57,8 @@ static void alert (char *, int); 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); @@ -71,7 +71,8 @@ static void make_mime_composition_file_entry(char *, int, char *); */ 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]; @@ -132,9 +133,9 @@ sendsbr (char **vec, int vecp, char *drft, struct stat *st, int rename_drft, cha */ 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 */ @@ -582,7 +583,8 @@ make_mime_composition_file_entry(char *file_name, int attachformat, */ 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; @@ -698,7 +700,7 @@ splitmsg (char **vec, int vecp, char *drft, struct stat *st, int delay) free (dp); fclose (in); - return sendaux (vec, vecp, drft, st); + return sendaux (vec, vecp, program, drft, st); } if (!pushsw) { @@ -788,7 +790,7 @@ splitmsg (char **vec, int vecp, char *drft, struct stat *st, int delay) } 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; @@ -811,11 +813,11 @@ splitmsg (char **vec, int vecp, char *drft, struct stat *st, int delay) /* * 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; @@ -859,7 +861,7 @@ sendaux (char **vec, int vecp, char *drft, struct stat *st) dup2 (fd, fileno (stderr)); close (fd); } - execvp (postproc, vec); + execvp (program, vec); fprintf (stderr, "unable to exec "); perror (postproc); _exit (-1); diff --git a/uip/viamail.c b/uip/viamail.c index 82c7db58..37514d5a 100644 --- a/uip/viamail.c +++ b/uip/viamail.c @@ -183,9 +183,9 @@ static int 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; @@ -240,11 +240,12 @@ via_mail (char *mailsw, char *subjsw, char *parmsw, char *descsw, 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++; diff --git a/uip/whatnowsbr.c b/uip/whatnowsbr.c index 90a2cf2e..712ea7bb 100644 --- a/uip/whatnowsbr.c +++ b/uip/whatnowsbr.c @@ -1063,8 +1063,8 @@ static void 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 @@ -1076,17 +1076,17 @@ sendit (char *sp, char **arg, char *file, int pushed) /* * 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. @@ -1094,17 +1094,17 @@ sendit (char *sp, char **arg, char *file, int pushed) 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; @@ -1116,7 +1116,12 @@ sendit (char *sp, char **arg, char *file, int pushed) 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 ("")); @@ -1312,10 +1317,9 @@ sendit (char *sp, char **arg, char *file, int pushed) 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); }