From 965fe13d3f17c03059f172d4b6df0e53d0240433 Mon Sep 17 00:00:00 2001 From: markus schnalke Date: Thu, 12 Feb 2015 07:49:33 +0100 Subject: [PATCH] mhmail: use execprog() --- uip/mhmail.c | 46 +++++++++++++++------------------------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/uip/mhmail.c b/uip/mhmail.c index 7e170a8..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; @@ -160,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 */ } -- 1.7.10.4