|
|
1.1 root 1: /*
2: * ttyname(f): return "/dev/ttyXX" which the the name of the
3: * tty belonging to file f.
4: * NULL if it is not a tty
5: */
6:
7: #define NULL 0
8: #include <sys/types.h>
9: #include <sys/dir.h>
10: #include <sys/stat.h>
11:
12: static char dev[] = "/dev/";
13: char *strcpy();
14: char *strcat();
15:
16: char *
17: ttyname(f)
18: {
19: struct stat fsb;
20: struct stat tsb;
21: struct direct db;
22: static char rbuf[32];
23: register df;
24:
25: if (isatty(f)==0)
26: return(NULL);
27: if (fstat(f, &fsb) < 0)
28: return(NULL);
29: if ((fsb.st_mode&S_IFMT) != S_IFCHR)
30: return(NULL);
31: if ((df = open(dev, 0)) < 0)
32: return(NULL);
33: while (read(df, (char *)&db, sizeof(db)) == sizeof(db)) {
34: if (db.d_ino == 0)
35: continue;
36: if (db.d_ino != fsb.st_ino)
37: continue;
38: strcpy(rbuf, dev);
39: strcat(rbuf, db.d_name);
40: if (stat(rbuf, &tsb) < 0)
41: continue;
42: if (tsb.st_dev==fsb.st_dev && tsb.st_ino==fsb.st_ino) {
43: close(df);
44: return(rbuf);
45: }
46: }
47: close(df);
48: return(NULL);
49: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.