]> Sergey Matveev's repositories - nnn.git/commitdiff
Fix #459
authorArun Prakash Jana <engineerarun@gmail.com>
Sat, 1 Feb 2020 03:27:16 +0000 (08:57 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sat, 1 Feb 2020 03:27:16 +0000 (08:57 +0530)
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

src/nnn.c

index 1a07dce21d5984f5a36e3c32b1748da90cfa8758..d3c66b642e9ef941ac32b396d0b320a2d7530bf2 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -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 */