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