Don't throw away data that we receive before we're ready for it. Just save
[u/mdw/putty] / pscp.c
diff --git a/pscp.c b/pscp.c
index a906303..e208157 100644 (file)
--- a/pscp.c
+++ b/pscp.c
@@ -180,12 +180,6 @@ int from_backend(void *frontend, int is_stderr, const char *data, int datalen)
        return 0;
     }
 
-    /*
-     * If this is before the real session begins, just return.
-     */
-    if (!outptr)
-       return 0;
-
     if ((outlen > 0) && (len > 0)) {
        unsigned used = outlen;
        if (used > len)
@@ -245,7 +239,7 @@ static int ssh_scp_recv(unsigned char *buf, int len)
     }
 
     while (outlen > 0) {
-       if (ssh_sftp_loop_iteration() < 0)
+       if (back->exitcode(backhandle) >= 0 || ssh_sftp_loop_iteration() < 0)
            return 0;                  /* doom */
     }
 
@@ -292,7 +286,7 @@ static void bump(char *fmt, ...)
     sfree(str2);
     errs++;
 
-    if (back != NULL && back->socket(backhandle) != NULL) {
+    if (back != NULL && back->connected(backhandle)) {
        char ch;
        back->special(backhandle, TS_EOF);
        ssh_scp_recv((unsigned char *) &ch, 1);
@@ -2285,7 +2279,7 @@ int psftp_main(int argc, char *argv[])
            tolocal(argc, argv);
     }
 
-    if (back != NULL && back->socket(backhandle) != NULL) {
+    if (back != NULL && back->connected(backhandle)) {
        char ch;
        back->special(backhandle, TS_EOF);
        ssh_scp_recv((unsigned char *) &ch, 1);