Introduction
Introduction Statistics Contact Development Disclaimer Help
Check if the ttymaj/ttymin match is actually a tty - ubase - suckless linux bas…
git clone git://git.suckless.org/ubase
Log
Files
Refs
README
LICENSE
---
commit 8a95422ff14aed8c8cd7cfad51913db90493a50c
parent a5c30abf8f1ac7a51a733544249b70b7ce90f1e2
Author: sin <[email protected]>
Date: Fri, 16 Jan 2015 16:02:25 +0000
Check if the ttymaj/ttymin match is actually a tty
Diffstat:
M libutil/tty.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
---
diff --git a/libutil/tty.c b/libutil/tty.c
@@ -2,6 +2,7 @@
#include <sys/types.h>
#include <sys/stat.h>
+#include <fcntl.h>
#include <dirent.h>
#include <limits.h>
#include <stdio.h>
@@ -25,6 +26,7 @@ ttytostr(int tty_maj, int tty_min, char *str, size_t n)
struct dirent *dp;
DIR *dirp;
char path[PATH_MAX];
+ int fd;
switch (tty_maj) {
case 136:
@@ -60,14 +62,21 @@ ttytostr(int tty_maj, int tty_min, char *str, size_t n)
}
if (stat(path, &sb) < 0) {
- weprintf("stat %s:", dp->d_name);
+ weprintf("stat %s:", path);
return -1;
}
if ((int)major(sb.st_rdev) == tty_maj &&
(int)minor(sb.st_rdev) == tty_min) {
- strlcpy(str, dp->d_name, n);
- break;
+ fd = open(path, O_RDONLY);
+ if (fd < 0)
+ continue;
+ if (isatty(fd)) {
+ strlcpy(str, dp->d_name, n);
+ close(fd);
+ break;
+ }
+ close(fd);
}
}
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.