Andy Hood points out that `#ifdef MONITOR_DEFAULTTONEAREST' would
[sgt/putty] / psftp.c
diff --git a/psftp.c b/psftp.c
index ca01f12..d395b6f 100644 (file)
--- a/psftp.c
+++ b/psftp.c
@@ -616,12 +616,13 @@ int sftp_general_put(struct sftp_command *cmd, int restart)
            }
        }
 
-       pktin = sftp_recv();
-       ret = xfer_upload_gotpkt(xfer, pktin);
-
-       if (!ret) {
-           printf("error while writing: %s\n", fxp_error());
-           err = 1;
+       if (!xfer_done(xfer)) {
+           pktin = sftp_recv();
+           ret = xfer_upload_gotpkt(xfer, pktin);
+           if (!ret) {
+               printf("error while writing: %s\n", fxp_error());
+               err = 1;
+           }
        }
     }
 
@@ -1639,14 +1640,13 @@ int from_backend(void *frontend, int is_stderr, const char *data, int datalen)
     unsigned char *p = (unsigned char *) data;
     unsigned len = (unsigned) datalen;
 
-    assert(len > 0);
-
     /*
      * stderr data is just spouted to local stderr and otherwise
      * ignored.
      */
     if (is_stderr) {
-       fwrite(data, 1, len, stderr);
+       if (len > 0)
+           fwrite(data, 1, len, stderr);
        return 0;
     }
 
@@ -1656,7 +1656,7 @@ int from_backend(void *frontend, int is_stderr, const char *data, int datalen)
     if (!outptr)
        return 0;
 
-    if (outlen > 0) {
+    if ((outlen > 0) && (len > 0)) {
        unsigned used = outlen;
        if (used > len)
            used = len;