Loading CHANGES +2 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,8 @@ Changelog Daniel Stenberg (22 Dec 2008) - Given a recent enough libssh2, libcurl can now seek/resume with SFTP even on file indexes beyond 2 or 4GB. - Anthony Bryan provided a set of patches that cleaned up manual language, corrected spellings and more. Loading RELEASE-NOTES +1 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ This release includes the following bugfixes: o curl_multi_timeout() no longer returns timeout 0 when there's nothing to do yet o the multi_socket API and HTTP pipelining now work a lot better when combined o SFTP seek/resume beyond 32bit file sizes This release includes the following known bugs: Loading lib/ssh.c +13 −3 Original line number Diff line number Diff line Loading @@ -431,6 +431,16 @@ static CURLcode ssh_getworkingpath(struct connectdata *conn, return CURLE_OK; } /* * Earlier libssh2 versions didn't have the ability to seek to 64bit positions * with 32bit size_t. */ #ifdef HAVE_LIBSSH2_SFTP_SEEK2 #define SFTP_SEEK(x,y) libssh2_sftp_seek2(x, (libssh2_uint64_t)y) #else #define SFTP_SEEK(x,y) libssh2_sftp_seek(x, y) #endif /* * ssh_statemach_act() runs the SSH statemachine "one round" and returns. The * data the pointer 'block' points to will be set to TRUE if the libssh2 Loading Loading @@ -1343,7 +1353,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block) Curl_pgrsSetUploadSize(data, data->set.infilesize); } libssh2_sftp_seek(sshc->sftp_handle, data->state.resume_from); SFTP_SEEK(sshc->sftp_handle, data->state.resume_from); } if(data->set.infilesize>0) { data->req.size = data->set.infilesize; Loading Loading @@ -1716,7 +1726,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block) size = to - from + 1; } libssh2_sftp_seek(conn->proto.sshc.sftp_handle, from); SFTP_SEEK(conn->proto.sshc.sftp_handle, from); } data->req.size = size; data->req.maxdownload = size; Loading Loading @@ -1750,7 +1760,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block) data->req.maxdownload = attrs.filesize - data->state.resume_from; Curl_pgrsSetDownloadSize(data, attrs.filesize - data->state.resume_from); libssh2_sftp_seek(sshc->sftp_handle, data->state.resume_from); SFTP_SEEK(sshc->sftp_handle, data->state.resume_from); } } /* Setup the actual download */ Loading Loading
CHANGES +2 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,8 @@ Changelog Daniel Stenberg (22 Dec 2008) - Given a recent enough libssh2, libcurl can now seek/resume with SFTP even on file indexes beyond 2 or 4GB. - Anthony Bryan provided a set of patches that cleaned up manual language, corrected spellings and more. Loading
RELEASE-NOTES +1 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ This release includes the following bugfixes: o curl_multi_timeout() no longer returns timeout 0 when there's nothing to do yet o the multi_socket API and HTTP pipelining now work a lot better when combined o SFTP seek/resume beyond 32bit file sizes This release includes the following known bugs: Loading
lib/ssh.c +13 −3 Original line number Diff line number Diff line Loading @@ -431,6 +431,16 @@ static CURLcode ssh_getworkingpath(struct connectdata *conn, return CURLE_OK; } /* * Earlier libssh2 versions didn't have the ability to seek to 64bit positions * with 32bit size_t. */ #ifdef HAVE_LIBSSH2_SFTP_SEEK2 #define SFTP_SEEK(x,y) libssh2_sftp_seek2(x, (libssh2_uint64_t)y) #else #define SFTP_SEEK(x,y) libssh2_sftp_seek(x, y) #endif /* * ssh_statemach_act() runs the SSH statemachine "one round" and returns. The * data the pointer 'block' points to will be set to TRUE if the libssh2 Loading Loading @@ -1343,7 +1353,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block) Curl_pgrsSetUploadSize(data, data->set.infilesize); } libssh2_sftp_seek(sshc->sftp_handle, data->state.resume_from); SFTP_SEEK(sshc->sftp_handle, data->state.resume_from); } if(data->set.infilesize>0) { data->req.size = data->set.infilesize; Loading Loading @@ -1716,7 +1726,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block) size = to - from + 1; } libssh2_sftp_seek(conn->proto.sshc.sftp_handle, from); SFTP_SEEK(conn->proto.sshc.sftp_handle, from); } data->req.size = size; data->req.maxdownload = size; Loading Loading @@ -1750,7 +1760,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block) data->req.maxdownload = attrs.filesize - data->state.resume_from; Curl_pgrsSetDownloadSize(data, attrs.filesize - data->state.resume_from); libssh2_sftp_seek(sshc->sftp_handle, data->state.resume_from); SFTP_SEEK(sshc->sftp_handle, data->state.resume_from); } } /* Setup the actual download */ Loading