summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorkh1 <karsten.heimrich@digia.com>2014-06-02 14:49:55 +0200
committerKarsten Heimrich <karsten.heimrich@digia.com>2014-06-03 10:49:59 +0200
commit86f3bd1f758afb96de89cb7115c03d59fc2b54c4 (patch)
treec449b12dad47a3410fa101be6f7a4df825f37a1a /src
parent363198f91731e5bb9abd9e6e8ef471d12d0ab524 (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.cpp60
-rw-r--r--src/libs/installer/fileutils.h6
-rw-r--r--src/libs/installer/metadatajob.cpp18
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();