X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=sftp.c;h=dbbd740109c2efedb90c7e4113021e3805c6fd12;hb=510f49e405e71ba5c97875e7a019364e1ef5fac9;hp=b4421f779e41dd56085bf5c840defa9594e78948;hpb=3ad0c89feca43af8c4e8ddb913bc232ad4fb5521;p=PuTTY.git diff --git a/sftp.c b/sftp.c index b4421f77..dbbd7401 100644 --- a/sftp.c +++ b/sftp.c @@ -352,6 +352,7 @@ void sftp_register(struct sftp_request *req) struct sftp_request *sftp_find_request(struct sftp_packet *pktin) { unsigned long id; + unsigned fid; struct sftp_request *req; if (!pktin) { @@ -363,7 +364,8 @@ struct sftp_request *sftp_find_request(struct sftp_packet *pktin) fxp_internal_error("did not receive a valid SFTP packet\n"); return NULL; } - req = find234(sftp_requests, &id, sftp_reqfind); + fid = (unsigned)id; + req = find234(sftp_requests, &fid, sftp_reqfind); if (!req || !req->registered) { fxp_internal_error("request ID mismatch\n"); @@ -656,11 +658,12 @@ struct sftp_request *fxp_close_send(struct fxp_handle *handle) return req; } -void fxp_close_recv(struct sftp_packet *pktin, struct sftp_request *req) +int fxp_close_recv(struct sftp_packet *pktin, struct sftp_request *req) { sfree(req); fxp_got_status(pktin); sftp_pkt_free(pktin); + return fxp_errtype == SSH_FX_OK; } struct sftp_request *fxp_mkdir_send(const char *path) @@ -1223,6 +1226,7 @@ int xfer_download_gotpkt(struct fxp_xfer *xfer, struct sftp_packet *pktin) if ((rr->retlen < 0 && fxp_error_type()==SSH_FX_EOF) || rr->retlen == 0) { xfer->eof = TRUE; + rr->retlen = 0; rr->complete = -1; #ifdef DEBUG_DOWNLOAD printf("setting eof\n"); @@ -1349,7 +1353,7 @@ struct fxp_xfer *xfer_upload_init(struct fxp_handle *fh, uint64 offset) int xfer_upload_ready(struct fxp_xfer *xfer) { - if (xfer->req_totalsize < xfer->req_maxsize) + if (sftp_sendbuffer() == 0) return 1; else return 0;