X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=uip%2Fmhmail.c;h=e79d874beb6222b209c0d707085b22b25feb1428;hb=2f43405ca3cccdfc56faca7a8b6b0d6913cf45aa;hp=b3a9acb538f6ddbda27de29ab1cb842643c0252a;hpb=ccf4f175ef4c4e7522f9510a4a1149c15d810dd9;p=mmh diff --git a/uip/mhmail.c b/uip/mhmail.c index b3a9acb..e79d874 100644 --- a/uip/mhmail.c +++ b/uip/mhmail.c @@ -40,7 +40,6 @@ static void intrser(int); int main(int argc, char **argv) { - pid_t child_id; int status, iscc = 0, nvec; char *cp, *tolist = NULL, *cclist = NULL, *subject = NULL; char *from = NULL, *body = NULL, **argp, **arguments; @@ -51,15 +50,13 @@ main(int argc, char **argv) setlocale(LC_ALL, ""); invo_name = mhbasename(argv[0]); - /* foil search of user profile/context */ - if (context_foil(NULL) == -1) - done(1); - /* Without arguments, exit. */ if (argc == 1) { adios(NULL, "no interactive mail shell. Use inc/scan/show instead."); } + context_read(); + arguments = getarguments(invo_name, argc, argv, 0); argp = arguments; @@ -162,39 +159,24 @@ main(int argc, char **argv) vec[nvec++] = tmpfil; vec[nvec] = NULL; - if ((child_id = fork()) == NOTOK) { - /* report failure and then send it */ - adios(NULL, "unable to fork"); + if ((status = execprog(*vec, vec))) { + /* spost failed, save draft as dead.letter */ + int in, out; - } else if (child_id == 0) { - /* child process */ - execvp(*vec, vec); - fprintf(stderr, "unable to exec "); - perror(*vec); - _exit(-1); - - } else { - /* parent process */ - if ((status = pidXwait(child_id, *vec))) { - /* spost failed, save draft as dead.letter */ - int in, out; - - in = open(tmpfil, O_RDONLY); - out = creat("dead.letter", 0600); - if (in == -1 || out == -1) { - fprintf(stderr, "Letter left at %s.\n", - tmpfil); - done(status ? 1 : 0); - } - cpydata(in, out, tmpfil, "dead.letter"); - close(in); - close(out); - fprintf(stderr, "Letter saved in dead.letter\n"); + in = open(tmpfil, O_RDONLY); + out = creat("dead.letter", 0600); + if (in == -1 || out == -1) { + fprintf(stderr, "Letter left at %s.\n", + tmpfil); + done(status ? 1 : 0); } - unlink(tmpfil); - done(status ? 1 : 0); + cpydata(in, out, tmpfil, "dead.letter"); + close(in); + close(out); + fprintf(stderr, "Letter saved in dead.letter\n"); } - + unlink(tmpfil); + done(status ? 1 : 0); return 0; /* dead code to satisfy the compiler */ }