mirror of
https://github.com/jarun/nnn.git
synced 2024-11-28 05:41:31 +00:00
Use fstatat() wherever possible
This commit is contained in:
parent
b06a4d4eeb
commit
05957936f5
30
noice.c
30
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;
|
||||
}
|
||||
/* All the rest */
|
||||
default:
|
||||
printmsg("Unsupported file");
|
||||
free(pathnew);
|
||||
goto nochange;
|
||||
}
|
||||
case SEL_FLTR:
|
||||
/* Read filter */
|
||||
printprompt("filter: ");
|
||||
|
|
Loading…
Reference in a new issue