diff options
author | Arun Prakash Jana <engineerarun@gmail.com> | 2019-10-19 08:43:32 +0530 |
---|---|---|
committer | Arun Prakash Jana <engineerarun@gmail.com> | 2019-10-19 08:43:32 +0530 |
commit | 864273dd9b8d0af7366710b528684fce358baf00 (patch) | |
tree | 3095b7622abb1fe89f919288aa2eddc04080eb2b | |
parent | ae7a3fbdc1ae4f335b6c42a4b65b0394972c5844 (diff) | |
download | nnn-864273dd9b8d0af7366710b528684fce358baf00.tar.gz |
Refactor current directory removal
-rw-r--r-- | src/nnn.c | 52 |
1 files changed, 29 insertions, 23 deletions
@@ -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; } |