]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
SCP: use libssh2_scp_recv2 to support > 2GB files on windows
authorDavid Byron <dbyron@dbyron.com>
Tue, 21 Jul 2015 03:27:12 +0000 (20:27 -0700)
committerDaniel Stenberg <daniel@haxx.se>
Sun, 14 Feb 2016 10:03:07 +0000 (11:03 +0100)
libssh2_scp_recv2 is introduced in libssh2 1.7.0 - to be released "any
day now.

Closes #451

lib/ssh.c

index 10bf54639c3a9171c3118c50ff9b1b8925c5df7b..e63446bed74b01fa3dfdb1555b1a27b3eb7436f5 100644 (file)
--- a/lib/ssh.c
+++ b/lib/ssh.c
@@ -2371,19 +2371,30 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
 
     case SSH_SCP_DOWNLOAD_INIT:
     {
+      curl_off_t bytecount;
+
       /*
        * We must check the remote file; if it is a directory no values will
        * 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 */
+#if LIBSSH2_VERSION_NUM < 0x010700
+      struct stat sb;
+      memset(&sb, 0, sizeof(struct stat));
       sshc->ssh_channel = libssh2_scp_recv(sshc->ssh_session,
                                            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(libssh2_session_last_errno(sshc->ssh_session) ==
            LIBSSH2_ERROR_EAGAIN) {