noice

small file browser
git clone git://git.2f30.org/noice.git
Log | Files | Refs | README | LICENSE

commit 05957936f5a7e452f4b8cda5bf50e92e745c4187
parent b06a4d4eeb7d95af4f0b0b02a5cfe21b3e9de69d
Author: sin <sin@2f30.org>
Date:   Wed Oct 22 16:50:30 +0100

Use fstatat() wherever possible

Diffstat:
noice.c | 32+++++++++-----------------------
1 file changed, 9 insertions(+), 23 deletions(-)
diff --git 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: ");