| Revision: | 1.1 |
| Committed: | Mon Nov 24 17:28:08 2003 UTC (22 years, 10 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 *** |
| # | 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 | } |