]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
Implement the `close' command, which terminates an SFTP session but
authorSimon Tatham <anakin@pobox.com>
Thu, 16 Dec 2004 19:19:59 +0000 (19:19 +0000)
committerSimon Tatham <anakin@pobox.com>
Thu, 16 Dec 2004 19:19:59 +0000 (19:19 +0000)
does not quit PSFTP, so you can then issue another `open' to connect
to somewhere else. This has apparently been trivial for some time,
for exactly the same reasons that `reuse-windows' was so easy, but
it hadn't occurred to me to actually do it until now.

[originally from svn r4994]

psftp.c

diff --git a/psftp.c b/psftp.c
index 8dcee0e29cba9116feccc9df2fb80fa633f54efd..b1cfe16d22fc3decf87ece3e8591159a88cd6490 100644 (file)
--- a/psftp.c
+++ b/psftp.c
@@ -767,6 +767,23 @@ int sftp_cmd_quit(struct sftp_command *cmd)
     return -1;
 }
 
+int sftp_cmd_close(struct sftp_command *cmd)
+{
+    if (back == NULL) {
+       printf("psftp: not connected to a host; use \"open host.name\"\n");
+       return 0;
+    }
+
+    if (back != NULL && back->socket(backhandle) != NULL) {
+       char ch;
+       back->special(backhandle, TS_EOF);
+       sftp_recvdata(&ch, 1);
+    }
+    do_sftp_cleanup();
+
+    return 0;
+}
+
 /*
  * List a directory. If no arguments are given, list pwd; otherwise
  * list the directory given in words[1].
@@ -1631,6 +1648,14 @@ static struct sftp_cmd_lookup {
            "  use commas to separate different modifiers (\"u+rwx,g+s\").\n",
            sftp_cmd_chmod
     },
+    {
+       "close", TRUE, "finish your SFTP session but do not quit PSFTP",
+           "\n"
+           "  Terminates your SFTP session, but does not quit the PSFTP\n"
+           "  program. You can then use \"open\" to start another SFTP\n"
+           "  session, to the same server or to a different one.\n",
+           sftp_cmd_close
+    },
     {
        "del", TRUE, "delete a file",
            " <filename>\n"
@@ -2579,12 +2604,10 @@ int psftp_main(int argc, char *argv[])
        back->special(backhandle, TS_EOF);
        sftp_recvdata(&ch, 1);
     }
+    do_sftp_cleanup();
     random_save_seed();
     cmdline_cleanup();
     console_provide_logctx(NULL);
-    do_sftp_cleanup();
-    backhandle = NULL;
-    back = NULL;
     sk_cleanup();
 
     return 0;