SCP: use libssh2_scp_recv2 to support > 2GB files on windows

libssh2_scp_recv2 is introduced in libssh2 1.7.0 - to be released "any
day now.

Closes #451
This commit is contained in:
David Byron 2015-07-20 20:27:12 -07:00 коммит произвёл Daniel Stenberg
Родитель 078753c40d
Коммит cae21ffc16
1 изменённых файлов: 15 добавлений и 4 удалений

Просмотреть файл

@ -2371,19 +2371,30 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
case SSH_SCP_DOWNLOAD_INIT: case SSH_SCP_DOWNLOAD_INIT:
{ {
curl_off_t bytecount;
/* /*
* We must check the remote file; if it is a directory no values will * We must check the remote file; if it is a directory no values will
* be set in sb * be set in sb
*/ */
struct stat sb;
curl_off_t bytecount;
/* clear the struct scp recv will fill in */ /*
memset(&sb, 0, sizeof(struct stat)); * If support for >2GB files exists, use it.
*/
/* get a fresh new channel from the ssh layer */ /* get a fresh new channel from the ssh layer */
#if LIBSSH2_VERSION_NUM < 0x010700
struct stat sb;
memset(&sb, 0, sizeof(struct stat));
sshc->ssh_channel = libssh2_scp_recv(sshc->ssh_session, sshc->ssh_channel = libssh2_scp_recv(sshc->ssh_session,
sftp_scp->path, &sb); sftp_scp->path, &sb);
#else
libssh2_struct_stat sb;
memset(&sb, 0, sizeof(libssh2_struct_stat));
sshc->ssh_channel = libssh2_scp_recv2(sshc->ssh_session,
sftp_scp->path, &sb);
#endif
if(!sshc->ssh_channel) { if(!sshc->ssh_channel) {
if(libssh2_session_last_errno(sshc->ssh_session) == if(libssh2_session_last_errno(sshc->ssh_session) ==
LIBSSH2_ERROR_EAGAIN) { LIBSSH2_ERROR_EAGAIN) {