mhmail: use execprog()
authormarkus schnalke <meillo@marmaro.de>
Thu, 12 Feb 2015 06:49:33 +0000 (07:49 +0100)
committermarkus schnalke <meillo@marmaro.de>
Thu, 12 Feb 2015 06:49:33 +0000 (07:49 +0100)
uip/mhmail.c

index 7e170a8..e79d874 100644 (file)
@@ -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 */
 }