[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdeutils/ark
From: Raphael Kubo da Costa <kubito () gmail ! com>
Date: 2009-12-29 4:57:20
Message-ID: 1262062640.121955.18320.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1067179 by rkcosta:
Do not call QDir::relativeFilePath() from QDir::current().
QDir::setCurrent() is called if global work dir is set, which ends
up resolving symlinks automatically. Creating a QDir and calling
relativeFilePath() on this object solves the problem.
BUG: 191821
M +12 -7 kerfuffle/cliinterface.cpp
M +14 -9 plugins/libarchive/libarchivehandler.cpp
M +2 -0 plugins/libarchive/libarchivehandler.h
--- trunk/KDE/kdeutils/ark/kerfuffle/cliinterface.cpp #1067178:1067179
@@ -228,10 +228,11 @@
return false;
}
- QString globalWorkdir = options.value("GlobalWorkDir").toString();
- if (!globalWorkdir.isEmpty()) {
- kDebug() << "GlobalWorkDir is set, changing dir to " << globalWorkdir;
- QDir::setCurrent(globalWorkdir);
+ const QString globalWorkDir = options.value("GlobalWorkDir").toString();
+ const QDir workDir = globalWorkDir.isEmpty() ? QDir::current() : QDir(globalWorkDir);
+ if (!globalWorkDir.isEmpty()) {
+ kDebug() << "GlobalWorkDir is set, changing dir to " << globalWorkDir;
+ QDir::setCurrent(globalWorkDir);
}
//start preparing the argument list
@@ -239,7 +240,7 @@
//now replace the various elements in the list
for (int i = 0; i < args.size(); ++i) {
- QString argument = args.at(i);
+ const QString argument = args.at(i);
kDebug() << "Processing argument " << argument;
if (argument == "$Archive") {
@@ -249,9 +250,13 @@
if (argument == "$Files") {
args.removeAt(i);
for (int j = 0; j < files.count(); ++j) {
+ // #191821: workDir must be used instead of QDir::current()
+ // so that symlinks aren't resolved automatically
+ // TODO: this kind of call should be moved upwards in the
+ // class hierarchy to avoid code duplication
+ const QString relativeName =
+ workDir.relativeFilePath(files.at(j));
- QString relativeName = QDir::current().relativeFilePath(files.at(j));
-
args.insert(i + j, relativeName);
++i;
}
--- trunk/KDE/kdeutils/ark/plugins/libarchive/libarchivehandler.cpp #1067178:1067179
@@ -46,7 +46,8 @@
: ReadWriteArchiveInterface(parent, args),
m_cachedArchiveEntryCount(0),
m_emitNoEntries(false),
- m_extractedFilesSize(0)
+ m_extractedFilesSize(0),
+ m_workDir(QDir::current())
{
}
@@ -295,14 +296,13 @@
int ret;
const bool creatingNewFile = !QFileInfo(filename()).exists();
- QString tempFilename = filename() + ".arkWriting";
+ const QString tempFilename = filename() + ".arkWriting";
- kDebug() << "Current path " << QDir::currentPath();
-
- QString globalWorkdir = options.value("GlobalWorkDir").toString();
- if (!globalWorkdir.isEmpty()) {
- kDebug() << "GlobalWorkDir is set, changing dir to " << globalWorkdir;
- QDir::setCurrent(globalWorkdir);
+ const QString globalWorkDir = options.value("GlobalWorkDir").toString();
+ if (!globalWorkDir.isEmpty()) {
+ kDebug() << "GlobalWorkDir is set, changing dir to " << globalWorkDir;
+ m_workDir.setPath(globalWorkDir);
+ QDir::setCurrent(globalWorkDir);
}
m_writtenFiles.clear();
@@ -653,8 +653,13 @@
int header_response;
const bool trailingSlash = fileName.endsWith('/');
- QString relativeName = QDir::current().relativeFilePath(fileName) + (trailingSlash ? "/" : "");
+ // #191821: workDir must be used instead of QDir::current()
+ // so that symlinks aren't resolved automatically
+ // TODO: this kind of call should be moved upwards in the
+ // class hierarchy to avoid code duplication
+ const QString relativeName = m_workDir.relativeFilePath(fileName) + (trailingSlash ? "/" : "");
+
KDE_stat(QFile::encodeName(relativeName).constData(), &st);
archive_entry_copy_stat(entry, &st);
archive_entry_copy_pathname(entry, QFile::encodeName(relativeName).constData());
--- trunk/KDE/kdeutils/ark/plugins/libarchive/libarchivehandler.h #1067178:1067179
@@ -28,6 +28,7 @@
#define LIBARCHIVEHANDLER_H
#include "kerfuffle/archiveinterface.h"
+#include <QDir>
#include <QList>
#include <QStringList>
@@ -57,6 +58,7 @@
qlonglong m_currentExtractedFilesSize;
bool m_emitNoEntries;
qlonglong m_extractedFilesSize;
+ QDir m_workDir;
QStringList m_writtenFiles;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic