Commit cae21ffc authored by David Byron's avatar David Byron Committed by Daniel Stenberg
Browse files

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
parent 078753c4
Loading
Loading
Loading
Loading
+15 −4
Original line number Original line Diff line number Diff line
@@ -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) {