From 479fe1ba750b1cda0ad3a159f2727619555436b0 Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 17 Dec 2004 13:39:41 +0000 Subject: [PATCH] The xfer mechanism wasn't gracefully terminating when an error was encountered part way through transfer. In particular, this caused psftp to hang (waiting for FXP_READ replies which had already arrived) if you try `get' (without -r) on a remote directory. git-svn-id: svn://svn.tartarus.org/sgt/putty@5005 cda61777-01e9-0310-a592-d414129be87e --- psftp.c | 7 +++++-- sftp.c | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/psftp.c b/psftp.c index 7bc556ee..0eedf9d2 100644 --- a/psftp.c +++ b/psftp.c @@ -201,7 +201,7 @@ int sftp_get_file(char *fname, char *outfname, int recurse, int restart, struct fxp_xfer *xfer; uint64 offset; FILE *fp; - int ret; + int ret, shown_err = FALSE; /* * In recursive mode, see if we're dealing with a directory. @@ -443,7 +443,10 @@ int sftp_get_file(char *fname, char *outfname, int recurse, int restart, ret = xfer_download_gotpkt(xfer, pktin); if (ret < 0) { - printf("error while reading: %s\n", fxp_error()); + if (!shown_err) { + printf("error while reading: %s\n", fxp_error()); + shown_err = TRUE; + } ret = 0; } diff --git a/sftp.c b/sftp.c index 66e96b44..a55262a7 100644 --- a/sftp.c +++ b/sftp.c @@ -1089,7 +1089,8 @@ int xfer_done(struct fxp_xfer *xfer) void xfer_download_queue(struct fxp_xfer *xfer) { - while (xfer->req_totalsize < xfer->req_maxsize && !xfer->eof) { + while (xfer->req_totalsize < xfer->req_maxsize && + !xfer->eof && !xfer->err) { /* * Queue a new read request. */ @@ -1155,6 +1156,8 @@ int xfer_download_gotpkt(struct fxp_xfer *xfer, struct sftp_packet *pktin) #endif } else if (rr->retlen < 0) { /* some error other than EOF; signal it back to caller */ + xfer_set_error(xfer); + rr->complete = -1; return -1; } -- 2.11.0