Revision: | 1.1 |
Committed: | Mon Nov 24 17:28:08 2003 UTC (20 years, 7 months ago) by pcg |
Content type: | text/plain |
Branch: | MAIN |
CVS Tags: | rel-2_1_0, rel-4_8, rxvt-2-0, rel-4_4, rel-4_6, rel-4_7, rel-4_0, rel-4_1, rel-4_2, rel-4_3, rel-3_7, rel-3_6, rel-3_5, rel-3_4, rel-3_3, rel-3_2, rel-2_8, rel-3_0, rel-2_7, rel-2_4, rel-2_5, rel-2_2, rel-2_3, rel-2_0, rel-3_8, rel-1-9, stable, rel-1-3, rel-1-2, rel-1_9, before_astyle, after_astyle |
Log Message: | *** empty log message *** |
# | Content |
---|---|
1 | #include "../../config.h" |
2 | |
3 | #include <stdio.h> |
4 | #ifdef HAVE_STDLIB_H |
5 | # include <stdlib.h> |
6 | #endif |
7 | #ifdef HAVE_SYS_TYPES_H |
8 | # include <sys/types.h> |
9 | #endif |
10 | #ifdef HAVE_UNISTD_H |
11 | # include <unistd.h> |
12 | #endif |
13 | #include <sys/wait.h> |
14 | |
15 | int verb = 1; |
16 | |
17 | int |
18 | main(int argc) |
19 | { |
20 | int i, pid; |
21 | int fd_pty, fd_tty; |
22 | const char *ttydev; |
23 | |
24 | if (argc != 1) |
25 | verb = 0; |
26 | fd_pty = fd_tty = -1; |
27 | ttydev = NULL; |
28 | fd_pty = rxvt_get_pty(&fd_tty, &ttydev); |
29 | if (fd_pty < 0) { |
30 | fprintf(stderr, "rxvt_get_pty() failed\n"); |
31 | exit(1); |
32 | } |
33 | if (verb) |
34 | fprintf(stderr, "rxvt_get_pty() OK. Found %s (opened pty fd: %d)\n", ttydev, fd_pty); |
35 | |
36 | if (fd_tty < 0) { |
37 | # ifdef HAVE_REVOKE |
38 | revoke(ttydev); |
39 | # endif |
40 | if ((fd_tty = rxvt_get_tty(ttydev)) < 0) { |
41 | fprintf(stderr, "rxvt_get_tty() failed on %s", ttydev); |
42 | exit(1); |
43 | } |
44 | if (verb) |
45 | fprintf(stderr, "rxvt_get_tty() OK. (opened tty fd: %d)\n", fd_tty); |
46 | } else if (verb) |
47 | fprintf(stderr, "Didn't call: rxvt_get_tty() (already have fd)\n"); |
48 | |
49 | for (i = 0; i < 255; i++) |
50 | if (i != fd_pty && i != 2 && i != fd_tty) |
51 | close(i); |
52 | pid = fork(); |
53 | if (pid) { |
54 | int exitst = 1; |
55 | int j = 0; |
56 | |
57 | close(fd_tty); |
58 | for ( ; ++j < 5; ) { |
59 | if (waitpid(-1, &i, WNOHANG) != 0) |
60 | break; |
61 | sleep(1); |
62 | } |
63 | if (j == 5) |
64 | kill(pid, 2); |
65 | if (WIFEXITED(i)) { |
66 | exitst = WEXITSTATUS(i); |
67 | if (exitst == 0) |
68 | fprintf(stderr, "OK\n"); |
69 | else |
70 | fprintf(stderr, "Failed. Child exit status: %d\n", WEXITSTATUS(i)); |
71 | } else |
72 | fprintf(stderr, "Interrupted\n"); |
73 | exit(exitst); |
74 | } |
75 | close(fd_pty); |
76 | if (verb) |
77 | fprintf(stderr, "Calling: rxvt_control_tty\n"); |
78 | i = rxvt_control_tty(fd_tty, ttydev); |
79 | if (i < 0) { |
80 | fprintf(stderr, "could not obtain control of tty\n"); |
81 | exit(1); |
82 | } |
83 | exit(0); |
84 | /* NOTREACHED */ |
85 | } |