Browse Source

Fix #459

The following changes are made:

- STDOUT and STDIN are redirected to /dev/null when spawning rclone
  rclone blocks and also shows error/warning messages. nnn needs to spawn
  rclone and return without waiting. To avoid the rclone messages from
  corrupting the screen nnn makes the child silent.
  Note: sshfs returns after mount with a proper error code
- prompt only if both sshfs and rclone are installed
master
Arun Prakash Jana 5 years ago
parent
commit
27943b9efb
No known key found for this signature in database GPG Key ID: A75979F35C080412
1 changed files with 19 additions and 6 deletions
  1. +19
    -6
      src/nnn.c

+ 19
- 6
src/nnn.c View File

@@ -3580,14 +3580,26 @@ static bool archive_mount(char *name, char *path, char *newpath, int *presel)
static bool remote_mount(char *newpath, int *presel) static bool remote_mount(char *newpath, int *presel)
{ {
uchar flag = F_CLI; uchar flag = F_CLI;
int r, opt = get_input(messages[MSG_REMOTE_OPTS]);
int opt;
char *tmp, *env, *cmd; char *tmp, *env, *cmd;
bool r, s;

r = getutil(utils[UTIL_RCLONE]);
s = getutil(utils[UTIL_SSHFS]);

if (!(r || s))
return FALSE;

if (r && s)
opt = get_input(messages[MSG_REMOTE_OPTS]);
else
opt = (!s) ? 'r' : 's';


if (opt == 's') { if (opt == 's') {
cmd = utils[UTIL_SSHFS]; cmd = utils[UTIL_SSHFS];
env = xgetenv("NNN_SSHFS", cmd); env = xgetenv("NNN_SSHFS", cmd);
} else if (opt == 'r') { } else if (opt == 'r') {
flag |= F_NOWAIT;
flag |= F_NOWAIT | F_NOTRACE;
cmd = utils[UTIL_RCLONE]; cmd = utils[UTIL_RCLONE];
env = xgetenv("NNN_RCLONE", "rclone mount"); env = xgetenv("NNN_RCLONE", "rclone mount");
} else { } else {
@@ -3612,10 +3624,11 @@ static bool remote_mount(char *newpath, int *presel)
} }


/* Convert "Host" to "Host:" */ /* Convert "Host" to "Host:" */
r = strlen(tmp);
if (tmp[r - 1] != ':') { /* Append ':' if missing */
tmp[r] = ':';
tmp[r + 1] = '\0';
size_t len = strlen(tmp);

if (tmp[len - 1] != ':') { /* Append ':' if missing */
tmp[len] = ':';
tmp[len + 1] = '\0';
} }


/* Connect to remote */ /* Connect to remote */


Loading…
Cancel
Save