Index: sftp/kio_sftp.cpp =================================================================== --- sftp/kio_sftp.cpp +++ sftp/kio_sftp.cpp @@ -1583,45 +1583,49 @@ return sftpProtocol::Success; } -void sftpProtocol::copy(const QUrl &src, const QUrl &dest, int permissions, KIO::JobFlags flags) +void sftpProtocol::copy(const QUrl &src, + const QUrl &dest, + int permissions, + KIO::JobFlags flags) { - qCDebug(KIO_SFTP_LOG) << src << " -> " << dest << " , permissions = " << QString::number(permissions) - << ", overwrite = " << (flags & KIO::Overwrite) - << ", resume = " << (flags & KIO::Resume); - - QString sCopyFile; - int errorCode = 0; - StatusCode cs = sftpProtocol::ClientError; - const bool isSourceLocal = src.isLocalFile(); - const bool isDestinationLocal = dest.isLocalFile(); - - if (!isSourceLocal && isDestinationLocal) { // sftp -> file - sCopyFile = dest.toLocalFile(); - cs = sftpCopyGet(src, sCopyFile, permissions, flags, errorCode); - if (cs == sftpProtocol::ServerError) - sCopyFile = src.url(); - } else if (isSourceLocal && !isDestinationLocal) { // file -> sftp - sCopyFile = src.toLocalFile(); - cs = sftpCopyPut(dest, sCopyFile, permissions, flags, errorCode); - if (cs == sftpProtocol::ServerError) - sCopyFile = dest.url(); - } else { - errorCode = KIO::ERR_UNSUPPORTED_ACTION; - sCopyFile.clear(); - } + qCDebug(KIO_SFTP_LOG) << src << " -> " << dest << " , permissions = " + << QString::number(permissions) + << ", overwrite = " << (flags & KIO::Overwrite) + << ", resume = " << (flags & KIO::Resume); - // On success or errorcode < 0, emit the finished signal and - // send a warning message to the client if errorCode < 0. - if (cs == sftpProtocol::Success || errorCode < 0) { - if (errorCode < 0) - sftpSendWarning(errorCode, sCopyFile); - finished(); - return; - } + QString sCopyFile; + int errorCode = 0; + StatusCode cs = sftpProtocol::ClientError; + const bool isSourceLocal = src.isLocalFile(); + const bool isDestinationLocal = dest.isLocalFile(); + + if (!isSourceLocal && isDestinationLocal) { // sftp -> file + sCopyFile = dest.toLocalFile(); + cs = sftpCopyGet(src, sCopyFile, permissions, flags, errorCode); + if (cs == sftpProtocol::ServerError) + sCopyFile = src.url(); + } else if (isSourceLocal && !isDestinationLocal) { // file -> sftp + sCopyFile = src.toLocalFile(); + cs = sftpCopyPut(dest, sCopyFile, permissions, flags, errorCode); + if (cs == sftpProtocol::ServerError) + sCopyFile = dest.url(); + } else { + errorCode = KIO::ERR_UNSUPPORTED_ACTION; + sCopyFile.clear(); + } - if (errorCode) { - error(errorCode, sCopyFile); - } + // On success or errorcode < 0, emit the finished signal and + // send a warning message to the client if errorCode < 0. + if (cs == sftpProtocol::Success || errorCode < 0) { + if (errorCode < 0) + sftpSendWarning(errorCode, sCopyFile); + finished(); + return; + } + + if (errorCode) { + error(errorCode, sCopyFile); + } } sftpProtocol::StatusCode sftpProtocol::sftpCopyGet(const QUrl& url, const QString& sCopyFile, int permissions, KIO::JobFlags flags, int& errorCode)