From ea2aba5dc9fbc5f3e50373c2f6c2e365049bd96c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 6 Nov 2003 00:10:03 +0000 Subject: [PATCH] Fixed compilation with local changes (to be commited later). git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5263 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kernel/libroot/posix/unistd/ttyname.c | 38 +++++++++++------------ 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/src/kernel/libroot/posix/unistd/ttyname.c b/src/kernel/libroot/posix/unistd/ttyname.c index 1b94450f02..5efe6d1125 100644 --- a/src/kernel/libroot/posix/unistd/ttyname.c +++ b/src/kernel/libroot/posix/unistd/ttyname.c @@ -3,6 +3,9 @@ ** Distributed under the terms of the OpenBeOS License. */ + +#include + #include #include #include @@ -15,66 +18,61 @@ #define DEV_TTY "/dev/tt/" -/* - * ttyname - return the full pathname of the tty device - * (NULL if not a tty or an error occurs) +/** return the full pathname of the tty device + * (NULL if not a tty or an error occurs) */ + char * -ttyname (int fd) +ttyname(int fd) { static char pathname[MAXPATHLEN]; - char *stub = pathname + sizeof(DEV_TTY) - 1; int stubLen = sizeof(pathname) - sizeof(DEV_TTY); - struct stat fdStat; DIR *dir; bool found = false; - - + // first, some sanity checks: if (!isatty(fd)) return NULL; - + if (fstat(fd, &fdStat) < 0) return NULL; - + if (!S_ISCHR(fdStat.st_mode)) return NULL; - - + // start with the root tty directory at /dev strcpy(pathname, DEV_TTY); - + if ((dir = opendir(pathname)) != NULL) { // find a matching entry in the directory: // we must match both the inode for the file // and the device that the file resides on - struct dirent *e; struct stat entryStat; - + while ((e = readdir(dir)) != NULL) { // try to match the file's inode if (e->d_ino != fdStat.st_ino) continue; - + // construct the entry's full filename and // call stat() to retrieve the inode info strncpy(stub, e->d_name, stubLen); - + if (stat(pathname, &entryStat) < 0) continue; - + if (entryStat.st_ino == fdStat.st_ino && entryStat.st_dev == fdStat.st_dev) { found = true; break; } } - + closedir(dir); } - + return found ? pathname : NULL; }