From 20c2ef842b6b0bed1d569c05060f3cea526c3d35 Mon Sep 17 00:00:00 2001 From: simon Date: Sun, 6 Jul 2008 12:11:34 +0000 Subject: [PATCH] Patch from Tim Kosse to make PSFTP remember to close files on various error conditions. git-svn-id: svn://svn.tartarus.org/sgt/putty@8109 cda61777-01e9-0310-a592-d414129be87e --- psftp.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/psftp.c b/psftp.c index 990bc074..2e25d97c 100644 --- a/psftp.c +++ b/psftp.c @@ -411,14 +411,15 @@ int sftp_get_file(char *fname, char *outfname, int recurse, int restart) if (restart) { char decbuf[30]; if (seek_file(file, uint64_make(0,0) , FROM_END) == -1) { + close_wfile(file); printf("reget: cannot restart %s - file too large\n", outfname); - sftp_register(req = fxp_close_send(fh)); - rreq = sftp_find_request(pktin = sftp_recv()); - assert(rreq == req); - fxp_close_recv(pktin, rreq); + sftp_register(req = fxp_close_send(fh)); + rreq = sftp_find_request(pktin = sftp_recv()); + assert(rreq == req); + fxp_close_recv(pktin, rreq); - return 0; + return 0; } offset = get_file_posn(file); @@ -643,6 +644,7 @@ int sftp_put_file(char *fname, char *outfname, int recurse, int restart) fh = fxp_open_recv(pktin, rreq); if (!fh) { + close_rfile(file); printf("%s: open for write: %s\n", outfname, fxp_error()); return 0; } @@ -658,10 +660,12 @@ int sftp_put_file(char *fname, char *outfname, int recurse, int restart) ret = fxp_fstat_recv(pktin, rreq, &attrs); if (!ret) { + close_rfile(file); printf("read size of %s: %s\n", outfname, fxp_error()); return 0; } if (!(attrs.flags & SSH_FILEXFER_ATTR_SIZE)) { + close_rfile(file); printf("read size of %s: size was not given\n", outfname); return 0; } -- 2.11.0