diff options
author | kh1 <karsten.heimrich@digia.com> | 2014-06-02 14:49:55 +0200 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@digia.com> | 2014-06-03 10:49:59 +0200 |
commit | 86f3bd1f758afb96de89cb7115c03d59fc2b54c4 (patch) | |
tree | c449b12dad47a3410fa101be6f7a4df825f37a1a /src | |
parent | 363198f91731e5bb9abd9e6e8ef471d12d0ab524 (diff) |
Use QTemporaryDir instead of our homemade solution.
Change-Id: Ia584a9b2f954df5c29a2f0aa5f12b201b2bfbcc4
Reviewed-by: Niels Weber <niels.weber@digia.com>
Reviewed-by: Tim Jenssen <tim.jenssen@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/installer/fileutils.cpp | 60 | ||||
-rw-r--r-- | src/libs/installer/fileutils.h | 6 | ||||
-rw-r--r-- | src/libs/installer/metadatajob.cpp | 18 |
3 files changed, 10 insertions, 74 deletions
diff --git a/src/libs/installer/fileutils.cpp b/src/libs/installer/fileutils.cpp index fe10277ea..3a89702a1 100644 --- a/src/libs/installer/fileutils.cpp +++ b/src/libs/installer/fileutils.cpp @@ -460,66 +460,6 @@ QString QInstaller::generateTemporaryFileName(const QString &templ) return f.fileName(); } -static char *installer_mkdtemp(char *templateName) -{ - QDir newDir; -#if defined(Q_OS_QNX ) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID) - static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - - const size_t length = strlen(templateName); - - char *XXXXXX = templateName + length - 6; - - if ((length < 6u) || strncmp(XXXXXX, "XXXXXX", 6)) - return 0; - - for (int i = 0; i < 256; ++i) { - /* Fill in the random bits. */ - int v = qrand(); - XXXXXX[0] = letters[v % 62]; - v /= 62; - XXXXXX[1] = letters[v % 62]; - v = qrand(); - XXXXXX[2] = letters[v % 62]; - v /= 62; - XXXXXX[3] = letters[v % 62]; - v = qrand(); - XXXXXX[4] = letters[v % 62]; - v /= 62; - XXXXXX[5] = letters[v % 62]; - - QString templateNameStr = QFile::decodeName(templateName); - - newDir = QDir(templateNameStr); - if (newDir.mkpath(templateNameStr)) - return templateName; - } - return 0; -#else - return mkdtemp(templateName); -#endif -} - -QString QInstaller::createTemporaryDirectory(const QString &templateName) -{ - // TODO: use QTemporaryDir if we switched to Qt5 - QString path = QDir::tempPath() + QLatin1String("/") + templateName + QLatin1String("XXXXXX"); - path = QFile::decodeName(installer_mkdtemp(QFile::encodeName(path).data())); - if (path.isEmpty()) { - QTemporaryFile f(path); - if (!f.open()) { - throw Error(QObject::tr("Could not create temporary directory at %1: %2" - ).arg(QFileInfo(f).absolutePath(), f.errorString())); - } else { - throw Error(QObject::tr("Could not create temporary directory at %1: unknown error" - ).arg(QFileInfo(f).absolutePath())); - } - } - - qDebug() << "Temporary directory created:" << path; - return path; -} - #ifdef Q_OS_WIN #include <qt_windows.h> diff --git a/src/libs/installer/fileutils.h b/src/libs/installer/fileutils.h index c22aa36b6..056cd87e0 100644 --- a/src/libs/installer/fileutils.h +++ b/src/libs/installer/fileutils.h @@ -104,12 +104,6 @@ private: void INSTALLER_EXPORT removeDirectoryThreaded(const QString &path, bool ignoreErrors = false); void INSTALLER_EXPORT removeSystemGeneratedFiles(const QString &path); - /*! - Creates a temporary directory - @throws QInstaller::Error if creating the temporary directory fails - */ - QString INSTALLER_EXPORT createTemporaryDirectory(const QString &templateName = QString()); - QString INSTALLER_EXPORT generateTemporaryFileName(const QString &templ=QString()); void INSTALLER_EXPORT moveDirectoryContents(const QString &sourceDir, const QString &targetDir); diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp index 79c7c7b05..e119db1c5 100644 --- a/src/libs/installer/metadatajob.cpp +++ b/src/libs/installer/metadatajob.cpp @@ -39,14 +39,14 @@ ** **************************************************************************/ #include "metadatajob.h" -#include "errors.h" -#include "messageboxhandler.h" + #include "metadatajob_p.h" #include "packagemanagercore.h" #include "productkeycheck.h" -#include "qinstallerglobal.h" #include "settings.h" +#include <QTemporaryDir> + namespace QInstaller { MetadataJob::MetadataJob(QObject *parent) @@ -241,14 +241,16 @@ MetadataJob::Status MetadataJob::parseUpdatesXml(const QList<FileTaskResult> &re return XmlDownloadFailure; Metadata metadata; - try { - metadata.directory = createTemporaryDirectory(QLatin1String("remoterepo-")); - m_tempDirDeleter.add(metadata.directory); - } catch (const QInstaller::Error &error) { - qDebug() << error.message(); + QTemporaryDir tmp(QDir::tempPath() + QLatin1String("/remoterepo-XXXXXX")); + if (!tmp.isValid()) { + qDebug() << "Could not create unique temporary directory."; return XmlDownloadFailure; } + tmp.setAutoRemove(false); + metadata.directory = tmp.path(); + m_tempDirDeleter.add(metadata.directory); + QFile file(result.target()); if (!file.rename(metadata.directory + QLatin1String("/Updates.xml"))) { qDebug() << "Could not rename target to Updates.xml. Error:" << file.errorString(); |