|
|
1.1 root 1: #include <errno.h>
2: #include <fcntl.h>
3:
4: static char PtyName[32] = "/dev/ptyXY";
5: static char TtyName[32] = "/dev/ttyXY";
6:
7: /*
8: * Claim a pseudo-tty.
9: * Takes pointers to buffers for the names of the newly claimed pair
10: * and returns a file descriptor on the open pty.
11: *
12: * Returns -1 on any sort of failure. errno will be set to ENXIO
13: * if there were no more ptys.
14: */
15: int
16: getpseudotty(newtty, newpty)
17: char *newtty, *newpty;
18: {
19: register char *l, *d;
20: int X, Y, f;
21:
22: /*
23: * Locate the "XY" in the above strings.
24: */
25: X = strlen(PtyName) - 2;
26: Y = X + 1;
27:
28: /*
29: * Walk through all possible values of X.
30: */
31: for (l = "pqrstuvwxyz"; '\0' != *l; ++l) {
32: PtyName[X] = *l;
33: /*
34: * Walk through all possible values of Y.
35: */
36: for (d = "0123456789abcdef"; *d; ++d) {
37: PtyName[Y] = *d;
38: /*
39: * If we can open() the pty, it means we have
40: * claimed it.
41: */
42: if ((f = open(PtyName, O_RDWR)) != -1) {
43: /*
44: * Return the name of the pty.
45: */
46: strcpy(newpty, PtyName);
47: /*
48: * Build and return the name of the tty.
49: */
50: TtyName[X] = *l;
51: TtyName[Y] = *d;
52: strcpy(newtty, TtyName);
53: return f;
54: } else if(errno == ENXIO) {
55: /*
56: * No more ptys!
57: */
58: break;
59: }
60: }
61: }
62: return -1;
63: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.