X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=psftp.c;h=7b8b540df933c337a5e76f11ad6c5d17e5ddb017;hb=6f871e3d226bc837e98b59649d323c6df5fc7f8a;hp=92b57a2f363793b94b95aa9aa2128505dd13b6a0;hpb=a454399ec8d841e627d9d5e05ac977536e776754;p=PuTTY.git diff --git a/psftp.c b/psftp.c index 92b57a2f..7b8b540d 100644 --- a/psftp.c +++ b/psftp.c @@ -433,7 +433,7 @@ int sftp_get_file(char *fname, char *outfname, int recurse, int restart) xfer = xfer_download_init(fh, offset); while (!xfer_done(xfer)) { void *vbuf; - int ret, len; + int len; int wpos, wlen; xfer_download_queue(xfer); @@ -491,7 +491,7 @@ int sftp_put_file(char *fname, char *outfname, int recurse, int restart) struct sftp_request *req; uint64 offset; RFile *file; - int ret, err, eof; + int ret, err = 0, eof; struct fxp_attrs attrs; long permissions; @@ -651,11 +651,12 @@ int sftp_put_file(char *fname, char *outfname, int recurse, int restart) if (!ret) { printf("read size of %s: %s\n", outfname, fxp_error()); + err = 1; goto cleanup; } if (!(attrs.flags & SSH_FILEXFER_ATTR_SIZE)) { printf("read size of %s: size was not given\n", outfname); - ret = 0; + err = 1; goto cleanup; } offset = attrs.size; @@ -674,9 +675,8 @@ int sftp_put_file(char *fname, char *outfname, int recurse, int restart) * FIXME: we can use FXP_FSTAT here to get the file size, and * thus put up a progress bar. */ - ret = 1; xfer = xfer_upload_init(fh, offset); - err = eof = 0; + eof = 0; while ((!err && !eof) || !xfer_done(xfer)) { char buffer[4096]; int len, ret; @@ -712,11 +712,17 @@ int sftp_put_file(char *fname, char *outfname, int recurse, int restart) cleanup: req = fxp_close_send(fh); pktin = sftp_wait_for_reply(req); - fxp_close_recv(pktin, req); + ret = fxp_close_recv(pktin, req); + if (!ret) { + if (!err) { + printf("error while closing: %s", fxp_error()); + err = 1; + } + } close_rfile(file); - return ret; + return (err == 0) ? 1 : 0; } /* ---------------------------------------------------------------------- @@ -2618,6 +2624,10 @@ int sftp_senddata(char *buf, int len) back->send(backhandle, buf, len); return 1; } +int sftp_sendbuffer(void) +{ + return back->sendbuffer(backhandle); +} /* * Short description of parameters. @@ -2941,6 +2951,8 @@ int psftp_main(int argc, char *argv[]) argv += i; back = NULL; + platform_psftp_post_option_setup(); + /* * If the loaded session provides a hostname, and a hostname has not * otherwise been specified, pop it in `userhost' so that