From 8bf8e1e29df17658c3d77629e17f88bf9159e21b Mon Sep 17 00:00:00 2001 From: markus schnalke Date: Wed, 14 Jan 2015 07:31:49 +0100 Subject: [PATCH] Use execprog() instead of system() ... partly transition There are several more places where system() should be replaced. As execprog() does not split strings into multiple arguments, `listproc' could no longer contain ``show -file''. We need to rework the concept of these `...proc' entries. This commit fixes tests/whatnow/test-attach-detach. --- config/config.c | 5 ++--- man/mh-profile.man5 | 2 +- uip/new.c | 23 ++++++++++++++--------- uip/repl.c | 10 +++++----- uip/send.c | 16 +++++++++++----- uip/spost.c | 4 +--- uip/whatnow.c | 46 ++++++++++++++++++++-------------------------- 7 files changed, 54 insertions(+), 52 deletions(-) diff --git a/config/config.c b/config/config.c index 52ef436..2bf7325 100644 --- a/config/config.c +++ b/config/config.c @@ -112,10 +112,9 @@ char *mimetypequeryproc = "file -b --mime"; /* ** This is the default program invoked by a "list" or "display" response ** at the "What now?" prompt. It will be given the absolute pathname of -** the message to show. The string ``show -file'' is most likely what you -** want to be you listproc. +** the message to show. */ -char *listproc = "show -file"; +char *listproc = "show"; /* ** This is used by mhl as a front-end. It is also used diff --git a/man/mh-profile.man5 b/man/mh-profile.man5 index 109d3c4..5e02d9f 100644 --- a/man/mh-profile.man5 +++ b/man/mh-profile.man5 @@ -392,7 +392,7 @@ user wishes. The default values are given in the examples. .RE .PP .BR listproc : -show \-file +show .RS 5 This program is used to list the contents of a message in response to the diff --git a/uip/new.c b/uip/new.c index a79845c..a43a710 100644 --- a/uip/new.c +++ b/uip/new.c @@ -311,7 +311,11 @@ doit(char *cur, char *folders, char *sequences[]) struct node *first, *cur_node, *node, *last = NULL, *prev; size_t folder_len; int count, total = 0; - char *command = NULL, *sequences_s = NULL; + char *sequences_s = NULL; + int argc = 0; + char *argv[MAXARGS]; + char *cp; + char buf[BUFSIZ]; if (cur == NULL || cur[0] == '\0') { cur = "inbox"; @@ -383,14 +387,15 @@ doit(char *cur, char *folders, char *sequences[]) } fflush(stdout); - /* - ** TODO: Split enough of scan.c out so that we can - ** call it here. - */ - command = concat("scan +", node->n_name, " ", - sequences_s, (void *)NULL); - system(command); - free(command); + argc = 0; + argv[argc++] = "scan"; + snprintf(buf, sizeof buf, "+%s", node->n_name); + argv[argc++] = buf; + for (cp=*sequences; *cp; cp++) { + argv[argc++] = cp; + } + argv[argc] = (char *)NULL; + execprog(*argv, argv); } else { if (node->n_field == NULL) { continue; diff --git a/uip/repl.c b/uip/repl.c index 9c9e5ce..e5fbc0f 100644 --- a/uip/repl.c +++ b/uip/repl.c @@ -573,11 +573,11 @@ finished: /* add an attachment header */ char buffer[BUFSIZ]; - snprintf(buffer, sizeof buffer, "anno -append -nodate '%s' " - "-comp '%s' -text '+%s %s'", - drft, - attach_hdr, mp->foldpath, m_name(mp->lowsel)); - if (system(buffer) != 0) { + snprintf(buffer, sizeof buffer, "+%s %s", + mp->foldpath, m_name(mp->lowsel)); + if (execprogl("anno", "anno", "-append", "-nodate", + drft, "-comp", attach_hdr, "-text", buffer, + (char *)NULL) != 0) { advise(NULL, "unable to add attachment header"); } } diff --git a/uip/send.c b/uip/send.c index adb2039..3ca6772 100644 --- a/uip/send.c +++ b/uip/send.c @@ -448,8 +448,8 @@ attach(char *draft_file_name) fclose(composition_file); /* We're ready to roll! */ - sprintf(buf, "mhbuild %s", composition_file_name); - if (system(buf) != 0) { + if (execprogl("mhbuild", "mhbuild", composition_file_name, + (char *)NULL) != 0) { /* some problem */ clean_up_temporary_files(); return (NOTOK); @@ -469,6 +469,7 @@ signandenc(char *draft_file_name) char buf[BUFSIZ]; int dosign = 0; int doenc = 0; + int ret; if (!(draft_file = fopen(draft_file_name, "r"))) { adios(NULL, "can't open draft file `%s'.", draft_file_name); @@ -495,9 +496,14 @@ signandenc(char *draft_file_name) strcpy(composition_file_name, draft_file_name); /* We're ready to roll! */ - sprintf(buf, "mhsign -m%s '%s'", doenc ? " -e" : "", - draft_file_name); - if (system(buf) != 0) { + if (doenc) { + ret = execprogl("mhsign", "mhsign", "-m", "-e", + draft_file_name, (char *)NULL); + } else { + ret = execprogl("mhsign", "mhsign", "-m", + draft_file_name, (char *)NULL); + } + if (ret != 0) { /* some problem */ return (NOTOK); } diff --git a/uip/spost.c b/uip/spost.c index 7a59d59..b65e4c4 100644 --- a/uip/spost.c +++ b/uip/spost.c @@ -628,7 +628,6 @@ static void process_bccs(char *origmsg) { char *bccdraft = NULL; - char buf[BUFSIZ]; struct mailname *mp = NULL; FILE *out = NULL; @@ -640,8 +639,7 @@ process_bccs(char *origmsg) fprintf(out, "------------\n"); fclose(out); - snprintf(buf, sizeof buf, "send %s", bccdraft); - if (system(buf) != 0) { + if (execprogl("send", "send", bccdraft, (char *)NULL) != 0) { admonish(invo_name, "Problems to send Bcc to %s", mp->m_text); unlink(bccdraft); diff --git a/uip/whatnow.c b/uip/whatnow.c index c60a11c..ff9d84c 100644 --- a/uip/whatnow.c +++ b/uip/whatnow.c @@ -174,9 +174,8 @@ main(int argc, char **argv) case DISPSW: /* display the msg being replied to or distributed */ if ((cp = getenv("mhaltmsg")) && *cp) { - snprintf(buf, sizeof buf, "%s '%s'", - listproc, cp); - system(buf); + execprogl(listproc, listproc, "-file", cp, + (char *)NULL); } else { advise(NULL, "no alternate message to display"); } @@ -191,8 +190,8 @@ main(int argc, char **argv) case LISTSW: /* display the draft file */ - snprintf(buf, sizeof buf, "%s '%s'", listproc, drft); - system(buf); + execprogl(listproc, listproc, "-file", drft, + (char *)NULL); break; case QUITSW: @@ -269,9 +268,9 @@ main(int argc, char **argv) /* ** List attachments on current draft. */ - snprintf(buf, sizeof buf, "anno -list -comp '%s' " - "-number '%s'", attach_hdr, drft); - if (system(buf) != 0) { + if (execprogl("anno", "anno", "-list", "-comp", + attach_hdr, "-number", drft, + (char *)NULL) != 0) { advise(NULL, "Could not list attachment headers."); } break; @@ -304,8 +303,6 @@ main(int argc, char **argv) ** Add the attachment annotation to the draft. */ if ((f = popen_in_dir(cwd, buf, "r"))) { - char buf[BUFSIZ]; - while (fgets(shell, sizeof(shell), f)) { *(strchr(shell, '\n')) = '\0'; @@ -315,13 +312,13 @@ main(int argc, char **argv) sprintf(file, "%s/%s", cwd, shell); } - snprintf(buf, sizeof buf, - "anno -nodate -append " - "-comp '%s' -text '%s'" - " '%s'", - attach_hdr, file, - drft); - if (system(buf) != 0) { + if (execprogl("anno", "anno", + "-nodate", + "-append", "-comp", + attach_hdr, "-text", + file, drft, + (char *)NULL) + != 0) { advise(NULL, "Could not add attachment header."); } } @@ -344,22 +341,20 @@ main(int argc, char **argv) ** that the numbering stays correct. */ for (arguments=argp+1; *arguments; arguments++) { - char buf[BUFSIZ]; int n; if (**arguments == '\0') { continue; } - n = atoi(*arguments); - snprintf(buf, sizeof buf, "anno -delete " - "-comp '%s' -number '%d' " - "'%s'", - attach_hdr, n, drft); - if (system(buf) != 0) { + if (execprogl("anno", "anno", "-delete", + "-comp", attach_hdr, + "-number", *arguments, drft, + (char *)NULL) != 0) { advise(NULL, "Could not delete attachment header."); } + n = atoi(*arguments); for (argp=arguments+1; *argp; argp++) { if (atoi(*argp) > n) { if (atoi(*argp) == 1) { @@ -374,8 +369,7 @@ main(int argc, char **argv) case WHOMSW: /* list recipients */ - snprintf(buf, sizeof buf, "%s '%s'", "whom", drft); - system(buf); + execprogl("whom", "whom", drft, (char *)NULL); break; default: -- 1.7.10.4