aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-10-19 08:43:32 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2019-10-19 08:43:32 +0530
commit864273dd9b8d0af7366710b528684fce358baf00 (patch)
tree3095b7622abb1fe89f919288aa2eddc04080eb2b
parentae7a3fbdc1ae4f335b6c42a4b65b0394972c5844 (diff)
downloadnnn-864273dd9b8d0af7366710b528684fce358baf00.tar.gz
Refactor current directory removal
-rw-r--r--src/nnn.c52
1 files changed, 29 insertions, 23 deletions
diff --git a/src/nnn.c b/src/nnn.c
index 89ab55a..146765e 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -2971,6 +2971,34 @@ static char *visit_parent(char *path, char *newpath, int *presel)
return dir;
}
+static void find_accessible_parent(char *path, char *newpath, char *lastname, int *presel)
+{
+ char *dir;
+
+ /* Save history */
+ xstrlcpy(lastname, xbasename(path), NAME_MAX + 1);
+
+ xstrlcpy(newpath, path, PATH_MAX);
+ while (true) {
+ dir = visit_parent(path, newpath, presel);
+ if (istopdir(path) || istopdir(newpath)) {
+ if (!dir)
+ dir = dirname(newpath);
+ break;
+ }
+ if (!dir) {
+ xstrlcpy(path, newpath, PATH_MAX);
+ continue;
+ }
+ break;
+ }
+
+ xstrlcpy(path, dir, PATH_MAX);
+
+ mvprintw(xlines - 1, 0, "cannot access dir\n");
+ xdelay();
+}
+
static bool execute_file(int cur, char *path, char *newpath, int *presel)
{
if (!ndents)
@@ -3870,30 +3898,8 @@ nochange:
/* If CWD is deleted or moved or perms changed, find an accessible parent */
if (access(path, F_OK)) {
DPRINTF_S("directory inaccessible");
-
- /* Save history */
- xstrlcpy(lastname, xbasename(path), NAME_MAX + 1);
-
- xstrlcpy(newpath, path, PATH_MAX);
- while (true) {
- dir = visit_parent(path, newpath, &presel);
- if (istopdir(path) || istopdir(newpath)) {
- if (!dir)
- dir = dirname(newpath);
- break;
- }
- if (!dir) {
- xstrlcpy(path, newpath, PATH_MAX);
- continue;
- }
- break;
- }
-
- xstrlcpy(path, dir, PATH_MAX);
-
+ find_accessible_parent(path, newpath, lastname, &presel);
setdirwatch();
- mvprintw(xlines - 1, 0, "cannot access directory\n");
- xdelay();
goto begin;
}