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