diff options
author | Katja Marttila <katja.marttila@qt.io> | 2022-12-13 09:04:55 +0200 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2022-12-13 09:08:15 +0200 |
commit | c02d33db5723b7605dc953de078c26d54f284d5e (patch) | |
tree | 2aa841ad0ac416bf9baed474e90c75abd6fc67f9 /src/libs/installer/extractarchiveoperation.cpp | |
parent | 662110e1594788ddc54ec379d61776e1bdd82670 (diff) | |
parent | b7929635dcdbd01135c04e0a7ffc8fa29d647d4d (diff) |
Merge remote-tracking branch 'origin/4.5' into master
Change-Id: Id8121e6b4cdda23c8c44cf779e35dce8d9a28090
Diffstat (limited to 'src/libs/installer/extractarchiveoperation.cpp')
-rw-r--r-- | src/libs/installer/extractarchiveoperation.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/libs/installer/extractarchiveoperation.cpp b/src/libs/installer/extractarchiveoperation.cpp index 986b9d8c8..162bd1609 100644 --- a/src/libs/installer/extractarchiveoperation.cpp +++ b/src/libs/installer/extractarchiveoperation.cpp @@ -178,9 +178,13 @@ bool ExtractArchiveOperation::performOperation() QString installDir = targetDir; // If we have package manager in use (normal installer run) then use // TargetDir for saving filenames, otherwise those would be saved to - // extracted folder. - if (packageManager()) - installDir = packageManager()->value(scTargetDir); + // extracted folder. Also initialize installerbasebinary which we use later + // to check if the extracted file in question is the maintenancetool itself. + QString installerBaseBinary; + if (PackageManagerCore *core = packageManager()) { + installDir = core->value(scTargetDir); + installerBaseBinary = core->toNativeSeparators(core->replaceVariables(core->installerBaseBinary())); + } const QString resourcesPath = installDir + QLatin1Char('/') + QLatin1String("installerResources"); QString fileDirectory = resourcesPath + QLatin1Char('/') + archivePath.section(QLatin1Char('/'), 1, 1, @@ -202,6 +206,13 @@ bool ExtractArchiveOperation::performOperation() setDefaultFilePermissions(file.fileName(), DefaultFilePermissions::NonExecutable); QDataStream out (&file); for (int i = 0; i < files.count(); ++i) { + if (!installerBaseBinary.isEmpty() && files[i].startsWith(installerBaseBinary)) { + // Do not write installerbase binary filename to extracted files. Installer binary + // is maintenance tool program, the binary is removed elsewhere + // when we do full uninstall. + files.clear(); + break; + } files[i] = replacePath(files.at(i), installDir, QLatin1String(scRelocatable)); } out << files; |