It is possible for SSH_FXP_CLOSE requests to fail. This can happen if the
server buffers writes and an error occurs flushing the data to disk while
processing the SSH_FXP_CLOSE request. If the close fails, sftp_put_file now
returns an error as well.
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 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)
struct sftp_request *req);
/*
- * Close a file/dir.
+ * Close a file/dir. Returns 1 on success, 0 on error.
*/
struct sftp_request *fxp_close_send(struct fxp_handle *handle);
-void fxp_close_recv(struct sftp_packet *pktin, struct sftp_request *req);
+int fxp_close_recv(struct sftp_packet *pktin, struct sftp_request *req);
/*
* Make a directory.