ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/test/gettty.c
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 ***

File Contents

# User Rev Content
1 pcg 1.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     }