diff options
| author | 2020-02-01 08:57:16 +0530 | |
|---|---|---|
| committer | 2020-02-01 08:57:16 +0530 | |
| commit | 27943b9efb95453258f9171916978d25a3ee6adc (patch) | |
| tree | de5c1d36c89c90208765a05b6afb237df2670460 /src | |
| parent | c7e2dc0005f55c921fa26edf130db75400d88c1d (diff) | |
| download | nnn-27943b9efb95453258f9171916978d25a3ee6adc.tar.gz | |
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
Diffstat (limited to 'src')
| -rw-r--r-- | src/nnn.c | 25 |
1 files changed, 19 insertions, 6 deletions
@@ -3580,14 +3580,26 @@ static bool archive_mount(char *name, char *path, char *newpath, int *presel) static bool remote_mount(char *newpath, int *presel) { uchar flag = F_CLI; - int r, opt = get_input(messages[MSG_REMOTE_OPTS]); + int opt; 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') { cmd = utils[UTIL_SSHFS]; env = xgetenv("NNN_SSHFS", cmd); } else if (opt == 'r') { - flag |= F_NOWAIT; + flag |= F_NOWAIT | F_NOTRACE; cmd = utils[UTIL_RCLONE]; env = xgetenv("NNN_RCLONE", "rclone mount"); } else { @@ -3612,10 +3624,11 @@ static bool remote_mount(char *newpath, int *presel) } /* 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 */ |