diff --git a/libssu/sandbox.cpp b/libssu/sandbox.cpp index ce6139b..47327a2 100644 --- a/libssu/sandbox.cpp +++ b/libssu/sandbox.cpp @@ -50,15 +50,6 @@ class Sandbox::FileEngineHandler : public QAbstractFileEngineHandler { Sandbox *Sandbox::s_instance = 0; -QSet Sandbox::s_ssuConfigFiles = QSet() - << SSU_CONFIGURATION - << SSU_REPO_CONFIGURATION - << SSU_DEFAULT_CONFIGURATION - << SSU_BOARD_MAPPING_CONFIGURATION; - -QSet Sandbox::s_ssuConfigDirectories = QSet() - << SSU_BOARD_MAPPING_CONFIGURATION_DIR; - Sandbox::Sandbox(){ if (s_instance != 0){ qFatal("%s: Cannot be instantiated more than once", Q_FUNC_INFO); @@ -171,20 +162,19 @@ QAbstractFileEngine *Sandbox::FileEngineHandler::create(const QString &fileName) return 0; } - if (!s_ssuConfigFiles.contains(fileName)){ - bool match = false; - foreach (const QString &ssuConfigDirectory, s_ssuConfigDirectories){ - if (fileName.startsWith(ssuConfigDirectory + '/')){ - match = true; - break; - } - } - if (!match){ - return 0; - } + const QString sandboxedFileName = m_sandboxPath + fileName; + QScopedPointer sandboxedFileEngine(new QFSFileEngine(sandboxedFileName)); + + const QAbstractFileEngine::FileFlags flags = sandboxedFileEngine->fileFlags( + QAbstractFileEngine::ExistsFlag | QAbstractFileEngine::DirectoryType); + + if (!(flags & QAbstractFileEngine::ExistsFlag)){ + return 0; } - const QString fileName_ = QDir(m_sandboxPath).absoluteFilePath(QString(fileName).remove(0, 1)); + if (flags & QAbstractFileEngine::DirectoryType){ + return 0; + } - return new QFSFileEngine(fileName_); + return sandboxedFileEngine.take(); } diff --git a/libssu/sandbox_p.h b/libssu/sandbox_p.h index 146bdf7..b817f4d 100644 --- a/libssu/sandbox_p.h +++ b/libssu/sandbox_p.h @@ -8,7 +8,6 @@ #ifndef _SANDBOX_P_H #define _SANDBOX_P_H -#include #include class Sandbox { @@ -33,8 +32,6 @@ class Sandbox { private: static Sandbox *s_instance; - static QSet s_ssuConfigFiles; - static QSet s_ssuConfigDirectories; QString m_sandboxPath; QString m_tempDir; FileEngineHandler *m_handler;