|
|
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.