#include <h/signals.h>
#include <h/utils.h>
#include <signal.h>
+#include <fcntl.h>
+
static struct swit switches[] = {
#define BODYSW 0
if ((child_id = fork()) == NOTOK) {
/* report failure and then send it */
adios(NULL, "unable to fork");
- } else if (child_id) {
+
+ } 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");
- execl("/bin/mv", "mv", tmpfil, "dead.letter", NULL);
- execl("/usr/bin/mv", "mv", tmpfil, "dead.letter",
- NULL);
- perror("mv");
- _exit(-1);
}
unlink(tmpfil);
done(status ? 1 : 0);
- } else {
- /* child process */
- execvp(*vec, vec);
- fprintf(stderr, "unable to exec ");
- perror(*vec);
- _exit(-1);
}
return 0; /* dead code to satisfy the compiler */