Find a parent when CWD disappears

The previous behaviour would exit nnn when the CWD disappeared.
This commit is contained in:
0xACE 2019-07-12 00:45:55 +02:00
parent ca714eac90
commit e3393d0437
1 changed files with 28 additions and 3 deletions

View File

@ -3297,11 +3297,36 @@ nochange:
if (getppid() == 1)
_exit(0);
/* Check if CWD is deleted to avoid hang, bad idea */
/* Check if CWD is deleted and find a existing parent */
if (access(path, F_OK)) {
DPRINTF_S("dir deleted or moved");
cfg.badexit = 1;
return;
/* Save last working directory */
xstrlcpy(lastdir, path, PATH_MAX);
/* 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;
} else if (!dir) {
xstrlcpy(path, newpath, PATH_MAX);
continue;
}
break;
}
xstrlcpy(path, dir, PATH_MAX);
setdirwatch();
mvprintw(xlines - 1, 0, "folder disappeared\n");
xdelay();
goto begin;
}
sel = nextsel(presel);