-
-getmaster()
-{
- char *pty, *bank, *cp;
- struct stat stb;
-
- pty = &line[strlen("/dev/ptyp")];
- for (bank = "pqrs"; *bank; bank++) {
- line[strlen("/dev/pty")] = *bank;
- *pty = '0';
- if (stat(line, &stb) < 0)
- break;
- for (cp = "0123456789abcdef"; *cp; cp++) {
- *pty = *cp;
- master = open(line, O_RDWR);
- if (master >= 0) {
- char *tp = &line[strlen("/dev/")];
- int ok;
-
- /* verify slave side is usable */
- *tp = 't';
- ok = access(line, R_OK|W_OK) == 0;
- *tp = 'p';
- if (ok) {
- (void) tcgetattr(0, &tt);
- (void) ioctl(0, TIOCGWINSZ,
- (char *)&win);
- return;
- }
- (void) close(master);
- }
- }
- }
- fprintf(stderr, "Out of pty's\n");
- fail();
-}
-
-getslave()
-{
-
- line[strlen("/dev/")] = 't';
- slave = open(line, O_RDWR);
- if (slave < 0) {
- perror(line);
- fail();
- }
- (void) tcsetattr(slave, TCSAFLUSH, &tt);
- (void) ioctl(slave, TIOCSWINSZ, (char *)&win);
- (void) setsid();
- (void) ioctl(slave, TIOCSCTTY, 0);
-}