1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- /* $Id$ */
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <sys/dir.h>
- #define DEV "/dev/"
- extern char *strcpy(), *strcat();
- char *
- ttyname(filedes)
- {
- static char result[MAXNAMLEN + 1 + 5];
- DIR *dirp;
- register struct direct *dp;
- struct stat fdstat;
- ino_t inode;
- dev_t device;
- char *name;
- if (! isatty(filedes) ||
- fstat(filedes, &fdstat) < 0 ||
- (fdstat.st_mode & S_IFMT) != S_IFCHR ||
- (dirp = opendir(DEV)) == NULL) {
- return 0;
- }
- inode = fdstat.st_ino;
- device = fdstat.st_rdev;
- while ((dp = readdir(dirp)) != NULL) {
- if (dp->d_ino != inode) continue;
- strcpy(result, DEV);
- strcat(result, dp->d_name);
- if (stat(result, &fdstat) < 0) continue;
- if (fdstat.st_rdev == device &&
- (fdstat.st_mode & S_IFMT) == S_IFCHR) {
- closedir(dirp);
- return result;
- }
- }
- closedir(dirp);
- return 0;
- }
|