]> diplodocus.org Git - nmh/blob - sbr/push.c
mhbuildsbr.c: Flip logic, moving goto to then-block; no need for else.
[nmh] / sbr / push.c
1 /* push.c -- push a fork into the background
2 *
3 * This code is Copyright (c) 2002, by the authors of nmh. See the
4 * COPYRIGHT file in the root directory of the nmh distribution for
5 * complete copyright information.
6 */
7
8 #include <h/mh.h>
9 #include <h/signals.h>
10 #include "m_mktemp.h"
11
12
13 void
14 push(void)
15 {
16 pid_t pid;
17 int i;
18
19 for (i = 0; (pid = fork()) == -1 && i < 5; i++)
20 sleep (5);
21
22 switch (pid) {
23 case -1:
24 /* fork error */
25 inform("unable to fork, so can't push...");
26 break;
27
28 case 0:
29 /* child, block a few signals and continue */
30 SIGNAL (SIGHUP, SIG_IGN);
31 SIGNAL (SIGINT, SIG_IGN);
32 SIGNAL (SIGQUIT, SIG_IGN);
33 SIGNAL (SIGTERM, SIG_IGN);
34 #ifdef SIGTSTP
35 SIGNAL (SIGTSTP, SIG_IGN);
36 SIGNAL (SIGTTIN, SIG_IGN);
37 SIGNAL (SIGTTOU, SIG_IGN);
38 #endif
39
40 unregister_for_removal(0);
41
42 if (freopen ("/dev/null", "r", stdin) == NULL) {
43 advise ("stdin", "freopen");
44 }
45 if (freopen ("/dev/null", "w", stdout) == NULL) {
46 advise ("stdout", "freopen");
47 }
48 break;
49
50 default:
51 /* parent, just exit */
52 done (0);
53 }
54 }