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