From 05957936f5a7e452f4b8cda5bf50e92e745c4187 Mon Sep 17 00:00:00 2001 From: sin Date: Wed, 22 Oct 2014 16:50:30 +0100 Subject: [PATCH] Use fstatat() wherever possible --- noice.c | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/noice.c b/noice.c index 48ee1057..a0a8f175 100644 --- a/noice.c +++ b/noice.c @@ -525,7 +525,6 @@ begin: for (;;) { int nlines; int odd; - char *pathnew; char *name; char *bin; char *dir; @@ -605,27 +604,19 @@ nochange: name = dents[cur].name; - /* Handle root case */ - if (strcmp(path, "/") == 0) - asprintf(&pathnew, "/%s", name); - else - asprintf(&pathnew, "%s/%s", path, name); - DPRINTF_S(name); - DPRINTF_S(pathnew); /* Get path info */ - r = stat(pathnew, &sb); + r = fstatat(dirfd(dirp), name, &sb, 0); if (r == -1) { printwarn(); - free(pathnew); goto nochange; } DPRINTF_U(sb.st_mode); - /* Directory */ - if (S_ISDIR(sb.st_mode)) { + switch (sb.st_mode & S_IFMT) { + case S_IFDIR: free(path); - path = pathnew; + path = xrealpath(name); free(filter); filter = xstrdup(ifilter); /* Reset filter */ /* Save history */ @@ -634,26 +625,21 @@ nochange: SLIST_INSERT_HEAD(&histhead, hist, entry); cur = 0; goto out; - } - /* Regular file */ - if (S_ISREG(sb.st_mode)) { + case S_IFREG: /* Open with */ bin = openwith(name); if (bin == NULL) { printmsg("No association"); - free(pathnew); goto nochange; } exitcurses(); - spawn(bin, pathnew); + spawn(bin, name); initcurses(); - free(pathnew); goto redraw; + default: + printmsg("Unsupported file"); + goto nochange; } - /* All the rest */ - printmsg("Unsupported file"); - free(pathnew); - goto nochange; case SEL_FLTR: /* Read filter */ printprompt("filter: ");