mirror of
https://github.com/jarun/nnn.git
synced 2025-01-09 09:31:09 +00:00
unmount() ask for target if not found (#358)
* unmount() ask for target if not found unmount() now properly asks for which target to unmount if it cannot automatically deduce which folder to unmount. * no more automatic unmounts outside of cfgdir
This commit is contained in:
parent
06ff2c55da
commit
ab0fe6c408
14
src/nnn.c
14
src/nnn.c
|
@ -2898,12 +2898,14 @@ static bool sshfs_mount(char *newpath, int *presel)
|
||||||
* Unmounts if the directory represented by name is a mount point.
|
* Unmounts if the directory represented by name is a mount point.
|
||||||
* Otherwise, asks for hostname
|
* Otherwise, asks for hostname
|
||||||
*/
|
*/
|
||||||
static bool unmount(char *name, char *newpath, int *presel)
|
static bool unmount(char *name, char *newpath, int *presel, char *currentpath)
|
||||||
{
|
{
|
||||||
static char cmd[] = "fusermount3"; /* Arch Linux utility */
|
static char cmd[] = "fusermount3"; /* Arch Linux utility */
|
||||||
static bool found = FALSE;
|
static bool found = FALSE;
|
||||||
char *tmp = name;
|
char *tmp = name;
|
||||||
struct stat sb, psb;
|
struct stat sb, psb;
|
||||||
|
bool child = false;
|
||||||
|
bool parent = false;
|
||||||
|
|
||||||
/* On Ubuntu it's fusermount */
|
/* On Ubuntu it's fusermount */
|
||||||
if (!found && !getutil(cmd)) {
|
if (!found && !getutil(cmd)) {
|
||||||
|
@ -2911,15 +2913,17 @@ static bool unmount(char *name, char *newpath, int *presel)
|
||||||
found = TRUE;
|
found = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tmp) {
|
if (tmp && strcmp(cfgdir, currentpath) == 0) {
|
||||||
mkpath(cfgdir, tmp, newpath);
|
mkpath(cfgdir, tmp, newpath);
|
||||||
if ((lstat(newpath, &sb) == -1) || (lstat(dirname(newpath), &psb) == -1)) {
|
child = lstat(newpath, &sb) != -1;
|
||||||
|
parent = lstat(dirname(newpath), &psb) != -1;
|
||||||
|
if (!child && !parent) {
|
||||||
*presel = MSGWAIT;
|
*presel = MSGWAIT;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tmp || (sb.st_dev == psb.st_dev)) {
|
if (!tmp || !child || !S_ISDIR(sb.st_mode) || (child && parent && sb.st_dev == psb.st_dev)) {
|
||||||
tmp = xreadline(NULL, "host: ");
|
tmp = xreadline(NULL, "host: ");
|
||||||
if (!tmp[0])
|
if (!tmp[0])
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -4679,7 +4683,7 @@ nochange:
|
||||||
goto begin;
|
goto begin;
|
||||||
case SEL_UMOUNT:
|
case SEL_UMOUNT:
|
||||||
tmp = ndents ? dents[cur].name : NULL;
|
tmp = ndents ? dents[cur].name : NULL;
|
||||||
unmount(tmp, newpath, &presel);
|
unmount(tmp, newpath, &presel, path);
|
||||||
goto nochange;
|
goto nochange;
|
||||||
case SEL_QUITCD: // fallthrough
|
case SEL_QUITCD: // fallthrough
|
||||||
case SEL_QUIT:
|
case SEL_QUIT:
|
||||||
|
|
Loading…
Reference in a new issue