]> diplodocus.org Git - nmh/blobdiff - sbr/push.c
read_switch.c: Move interface declaration to own file.
[nmh] / sbr / push.c
index ce00f68d9591eaa2dcf388756f7d7bb00c3d2891..5417f39047dbb4ee37e0b93cce31f41020981eec 100644 (file)
@@ -1,30 +1,28 @@
-
-/*
- * 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
  * complete copyright information.
  */
 
-#include <h/mh.h>
-#include <h/signals.h>
-#include <signal.h>
+#include "h/mh.h"
+#include "push.h"
+#include "error.h"
+#include "h/signals.h"
+#include "h/done.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:
@@ -38,8 +36,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:
@@ -47,4 +52,3 @@ push(void)
            done (0);
     }
 }
-