Use fstatat() wherever possible

This commit is contained in:
sin 2014-10-22 16:50:30 +01:00
parent b06a4d4eeb
commit 05957936f5
1 changed files with 9 additions and 23 deletions

32
noice.c
View File

@ -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: ");