Introduction
Introduction Statistics Contact Development Disclaimer Help
Handle cleanup properly in ttytostr() - ubase - suckless linux base utils
git clone git://git.suckless.org/ubase
Log
Files
Refs
README
LICENSE
---
commit a7a561ef008ea0842b54713434d5f3fd79e8ccec
parent 8a95422ff14aed8c8cd7cfad51913db90493a50c
Author: sin <[email protected]>
Date: Fri, 16 Jan 2015 16:06:42 +0000
Handle cleanup properly in ttytostr()
Diffstat:
M libutil/tty.c | 20 ++++++++++++++------
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;
}
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.