]> diplodocus.org Git - nmh/blobdiff - sbr/push.c
new.c: Order two return statements to match comment.
[nmh] / sbr / push.c
index b4e3f4983f2297540f5494f797377bbdb22c3775..6708db4700a7b19857f43d00984e53fe11f8859a 100644 (file)
@@ -1,6 +1,4 @@
-
-/*
- * push.c -- push a fork into the background
+/* push.c -- push a fork into the background
  *
  * This code is Copyright (c) 2002, by the authors of nmh.  See the
  * COPYRIGHT file in the root directory of the nmh distribution for
@@ -9,21 +7,19 @@
 
 #include <h/mh.h>
 #include <h/signals.h>
+#include "m_mktemp.h"
 
 
 void
 push(void)
 {
     pid_t pid;
-    int i;
-
-    for (i = 0; (pid = fork()) == -1 && i < 5; i++)
-       sleep (5);
 
+    pid = fork();
     switch (pid) {
        case -1:
            /* fork error */
-           advise (NULL, "unable to fork, so can't push...");
+           inform("unable to fork, so can't push...");
            break;
 
        case 0:
@@ -37,8 +33,15 @@ push(void)
            SIGNAL (SIGTTIN, SIG_IGN);
            SIGNAL (SIGTTOU, SIG_IGN);
 #endif
-           freopen ("/dev/null", "r", stdin);
-           freopen ("/dev/null", "w", stdout);
+
+           unregister_for_removal(0);
+
+           if (freopen ("/dev/null", "r", stdin) == NULL) {
+               advise ("stdin", "freopen");
+            }
+           if (freopen ("/dev/null", "w", stdout) == NULL) {
+               advise ("stdout", "freopen");
+            }
            break;
 
        default:
@@ -46,4 +49,3 @@ push(void)
            done (0);
     }
 }
-