diff options
Diffstat (limited to 'src/libs/installer/lib7z_facade.cpp')
-rw-r--r-- | src/libs/installer/lib7z_facade.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/libs/installer/lib7z_facade.cpp b/src/libs/installer/lib7z_facade.cpp index 6d1b6a57d..e0d8a53e4 100644 --- a/src/libs/installer/lib7z_facade.cpp +++ b/src/libs/installer/lib7z_facade.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2021 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -37,6 +37,7 @@ #include "lib7z_guid.h" #include "globals.h" #include "directoryguard.h" +#include "fileguard.h" #ifndef Q_OS_WIN # include "StdAfx.h" @@ -362,7 +363,7 @@ static quint32 getUInt32Property(IInArchive *archive, int index, int propId, qui static QFile::Permissions getPermissions(IInArchive *archive, int index, bool *hasPermissions) { quint32 attributes = getUInt32Property(archive, index, kpidAttrib, 0); - QFile::Permissions permissions = nullptr; + QFile::Permissions permissions = QFile::Permissions(); if (attributes & FILE_ATTRIBUTE_UNIX_EXTENSION) { if (hasPermissions != nullptr) *hasPermissions = true; @@ -538,6 +539,7 @@ QVector<File> listArchive(QFileDevice *archive) f.archiveIndex.setY(item); f.path = UString2QString(s).replace(QLatin1Char('\\'), QLatin1Char('/')); Archive_IsItem_Folder(arch, item, f.isDirectory); + Archive_GetItemBoolProp(arch, item, kpidSymLink, f.isSymbolicLink); f.permissions_enum = getPermissions(arch, item, nullptr); getDateTimeProperty(arch, item, kpidMTime, &(f.utcTime)); f.uncompressedSize = getUInt64Property(arch, item, kpidSize, 0); @@ -622,6 +624,11 @@ STDMETHODIMP ExtractCallback::GetStream(UInt32 index, ISequentialOutStream **out foreach (const QString &directory, directories) setCurrentFile(directory); + QScopedPointer<QInstaller::FileGuardLocker> locker(nullptr); + if (!isDir) { + locker.reset(new QInstaller::FileGuardLocker( + fi.absoluteFilePath(), QInstaller::FileGuard::globalObject())); + } if (!isDir && !prepareForFile(fi.absoluteFilePath())) return E_FAIL; |