URI: 
       Handle cleanup properly in ttytostr() - ubase - suckless linux base utils
  HTML git clone git://git.suckless.org/ubase
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit a7a561ef008ea0842b54713434d5f3fd79e8ccec
   DIR parent 8a95422ff14aed8c8cd7cfad51913db90493a50c
  HTML Author: sin <sin@2f30.org>
       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(-)
       ---
   DIR 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;
        }