|
|
1.1 ! root 1: #define NEWTTYS 1 ! 2: /* ! 3: * Coherent I/O Library ! 4: * Return the name of the terminal device ! 5: * associated with the given file descriptor. ! 6: * The names in /etc/ttys define the domain. ! 7: */ ! 8: #include <stdio.h> ! 9: #include <sys/stat.h> ! 10: #include <sys/dir.h> ! 11: ! 12: static char dev_buff[DIRSIZ+8] = "/dev/console"; ! 13: ! 14: char * ! 15: ttyname(fd) ! 16: int fd; ! 17: { ! 18: if (fttyslot(fd) >= 0) ! 19: return (dev_buff); ! 20: return (NULL); ! 21: } ! 22: ! 23: /* ! 24: * Return the /etc/ttys slot for fd, -1 on error. ! 25: * The /dev/... name is left in dev_buff. ! 26: * Used by ttyname and ttyslot. ! 27: */ ! 28: fttyslot(fd) ! 29: { ! 30: register FILE *fp; ! 31: register short fd_mode; ! 32: register dev_t fd_rdev; ! 33: register int slot; ! 34: struct stat sb; ! 35: extern char *index(); ! 36: ! 37: if (fstat(fd, &sb) < 0 ! 38: || (fp = fopen("/etc/ttys", "r")) == NULL) ! 39: return (-1); ! 40: fd_mode = sb.st_mode; ! 41: fd_rdev = sb.st_rdev; ! 42: for (slot = 0; ; slot += 1) { ! 43: if (getc(fp) == '\n' /* Missing status */ ! 44: #if NEWTTYS ! 45: || getc(fp) == '\n' /* Missing line type, ie loc or rem */ ! 46: #endif ! 47: || getc(fp) == '\n' /* Missing getty arg */ ! 48: || fgets(dev_buff+5, DIRSIZ, fp) == NULL ! 49: || index(dev_buff, '\n') == NULL) { ! 50: slot = -1; ! 51: break; ! 52: } ! 53: *index(dev_buff, '\n') = 0; ! 54: if (stat(dev_buff, &sb) >= 0 ! 55: && sb.st_mode == fd_mode ! 56: && sb.st_rdev == fd_rdev) ! 57: break; ! 58: } ! 59: fclose(fp); ! 60: return (slot); ! 61: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.