summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/fileutils.cpp
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2022-03-10 08:28:54 +0000
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2022-03-15 14:28:41 +0000
commit1e676ad0eb6e1cf163b77923c7da9815b09e3def (patch)
tree2638f614fb27f0da239f337f074c49a113f8836d /src/libs/installer/fileutils.cpp
parent03db59aeaacf696dd9262523ebaa44b74f1363f1 (diff)
Revert "Simplify QInstaller::generateTemporaryFileName()"
This reverts commit 270c5dfd9b6c86bec8eaf34d0a2c3d3b945ed5e5. Reason for revert: This caused a regression when an absolute path pointing to a directory non-writable by current user was used. QTemporaryFile uses its own file engine so we need to use QFile instead to forward the calls to the elevated privilege installer process with the Qt Installer Framework's RemoteFileEngine. Task-number: QTIFW-2575 Change-Id: I47f5bea06f9e1689ee322d972b405d8127967a98 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'src/libs/installer/fileutils.cpp')
-rw-r--r--src/libs/installer/fileutils.cpp32
1 files changed, 21 insertions, 11 deletions
diff --git a/src/libs/installer/fileutils.cpp b/src/libs/installer/fileutils.cpp
index b46883c5a..5a89073fc 100644
--- a/src/libs/installer/fileutils.cpp
+++ b/src/libs/installer/fileutils.cpp
@@ -454,21 +454,31 @@ void QInstaller::mkpath(const QString &path)
*/
QString QInstaller::generateTemporaryFileName(const QString &templ)
{
- static const QLatin1String staticPart("%1.tmp.XXXXXX");
-
- QTemporaryFile f;
- if (!templ.isEmpty())
- f.setFileTemplate(QString(staticPart).arg(templ));
-
- if (!f.open()) {
- if (!templ.isEmpty()) {
- throw Error(QCoreApplication::translate("QInstaller",
- "Cannot open temporary file for template %1: %2").arg(templ, f.errorString()));
- } else {
+ if (templ.isEmpty()) {
+ QTemporaryFile f;
+ if (!f.open()) {
throw Error(QCoreApplication::translate("QInstaller",
"Cannot open temporary file: %1").arg(f.errorString()));
}
+ return f.fileName();
+ }
+
+ static const QString characters = QLatin1String("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");
+ QString suffix;
+ for (int i = 0; i < 5; ++i)
+ suffix += characters[QRandomGenerator::global()->generate() % characters.length()];
+
+ const QString tmp = QLatin1String("%1.tmp.%2.%3");
+ int count = 1;
+ while (QFile::exists(tmp.arg(templ, suffix).arg(count)))
+ ++count;
+
+ QFile f(tmp.arg(templ, suffix).arg(count));
+ if (!f.open(QIODevice::WriteOnly)) {
+ throw Error(QCoreApplication::translate("QInstaller",
+ "Cannot open temporary file for template %1: %2").arg(templ, f.errorString()));
}
+ f.remove();
return f.fileName();
}