]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
sink(): finish waiting for remote EOF after a local error.
authorSimon Tatham <anakin@pobox.com>
Wed, 15 Feb 2017 21:41:28 +0000 (21:41 +0000)
committerSimon Tatham <anakin@pobox.com>
Wed, 15 Feb 2017 21:41:28 +0000 (21:41 +0000)
We responded to a local error writing out the destination file by
going into a mode where we just looped round receiving and throwing
away data until our count of the file size reached the file size we
expected - but once we were in that mode, we never actually
incremented the count!

pscp.c

diff --git a/pscp.c b/pscp.c
index f7e09db959ccd1d60bdd4163f70b156aa0b265ce..454ec084c5cf5d161d713ed2f643e5dc4429bee2 100644 (file)
--- a/pscp.c
+++ b/pscp.c
@@ -1561,8 +1561,7 @@ int scp_recv_filedata(char *data, int len)
 
        if (xfer_download_data(scp_sftp_xfer, &vbuf, &actuallen)) {
             if (actuallen <= 0) {
-                tell_user(stderr, "pscp: %s while reading",
-                          actuallen < 0 ? "error" : "end of file");
+                tell_user(stderr, "pscp: end of file while reading");
                 errs++;
                 sfree(vbuf);
                 return -1;
@@ -1970,8 +1969,10 @@ static void sink(const char *targ, const char *src)
            read = scp_recv_filedata(transbuf, (int)blksize.lo);
            if (read <= 0)
                bump("Lost connection");
-           if (wrerror)
+           if (wrerror) {
+                received = uint64_add32(received, read);
                continue;
+            }
            if (write_to_file(f, transbuf, read) != (int)read) {
                wrerror = 1;
                /* FIXME: in sftp we can actually abort the transfer */
@@ -1979,6 +1980,7 @@ static void sink(const char *targ, const char *src)
                    printf("\r%-25.25s | %50s\n",
                           stat_name,
                           "Write error.. waiting for end of file");
+                received = uint64_add32(received, read);
                continue;
            }
            if (statistics) {