commit a7a561ef008ea0842b54713434d5f3fd79e8ccec
parent 8a95422ff14aed8c8cd7cfad51913db90493a50c
Author: sin <sin@2f30.org>
Date: Fri, 16 Jan 2015 16:06:42 +0000
Handle cleanup properly in ttytostr()
Diffstat:
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/libutil/tty.c b/libutil/tty.c
@@ -27,6 +27,7 @@ ttytostr(int tty_maj, int tty_min, char *str, size_t n)
DIR *dirp;
char path[PATH_MAX];
int fd;
+ int r = 0;
switch (tty_maj) {
case 136:
@@ -54,16 +55,19 @@ ttytostr(int tty_maj, int tty_min, char *str, size_t n)
if (strlcpy(path, "/dev/", sizeof(path)) >= sizeof(path)) {
weprintf("path too long\n");
- return -1;
+ r = -1;
+ goto err0;
}
if (strlcat(path, dp->d_name, sizeof(path)) >= sizeof(path)) {
weprintf("path too long\n");
- return -1;
+ r = -1;
+ goto err0;
}
if (stat(path, &sb) < 0) {
weprintf("stat %s:", path);
- return -1;
+ r = -1;
+ goto err0;
}
if ((int)major(sb.st_rdev) == tty_maj &&
@@ -75,15 +79,19 @@ ttytostr(int tty_maj, int tty_min, char *str, size_t n)
strlcpy(str, dp->d_name, n);
close(fd);
break;
+ } else {
+ close(fd);
+ r = -1;
+ goto err0;
}
- close(fd);
}
}
+err0:
if (closedir(dirp) < 0) {
weprintf("closedir /dev:");
- return -1;
+ r = -1;
}
- return 0;
+ return r;
}