diff --git a/part.cpp b/part.cpp --- a/part.cpp +++ b/part.cpp @@ -2536,6 +2536,10 @@ fileName = tf.fileName(); tf.close(); + // Figure out the real save url, for symlinks we don't want to copy over the symlink but over the target file + const QUrl realSaveUrl = saveUrl.isLocalFile() ? QUrl::fromLocalFile( QFileInfo( saveUrl.toLocalFile() ).canonicalFilePath() ) + : saveUrl; + QScopedPointer tempFile; KIO::Job *copyJob = nullptr; // this will be filled with the job that writes to saveUrl @@ -2564,7 +2568,7 @@ return false; } - copyJob = KIO::file_copy( QUrl::fromLocalFile( fileName ), saveUrl, -1, KIO::Overwrite ); + copyJob = KIO::file_copy( QUrl::fromLocalFile( fileName ), realSaveUrl, -1, KIO::Overwrite ); } else { @@ -2638,7 +2642,7 @@ return false; } - copyJob = KIO::file_copy( QUrl::fromLocalFile( fileName ), saveUrl, -1, KIO::Overwrite ); + copyJob = KIO::file_copy( QUrl::fromLocalFile( fileName ), realSaveUrl, -1, KIO::Overwrite ); } else { @@ -2658,7 +2662,7 @@ return false; } - copyJob = KIO::file_copy( QUrl::fromLocalFile( fileName ), saveUrl, -1, KIO::Overwrite ); + copyJob = KIO::file_copy( QUrl::fromLocalFile( fileName ), realSaveUrl, -1, KIO::Overwrite ); } else { @@ -2692,12 +2696,12 @@ if ( srcUrl != saveUrl ) { - copyJob = KIO::file_copy( srcUrl, saveUrl, -1, KIO::Overwrite ); + copyJob = KIO::file_copy( srcUrl, realSaveUrl, -1, KIO::Overwrite ); } else { // Don't do a real copy in this case, just update the timestamps - copyJob = KIO::setModificationTime( saveUrl, QDateTime::currentDateTime() ); + copyJob = KIO::setModificationTime( realSaveUrl, QDateTime::currentDateTime() ); } } }