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