diff options
author | kh1 <karsten.heimrich@digia.com> | 2014-08-27 11:46:28 +0200 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@digia.com> | 2014-09-04 10:42:05 +0200 |
commit | 85cc7f8fc5538cdf0d6231a0b679eb06e4bd9cfc (patch) | |
tree | dba76c133baebdd093b456166de57e715ab88a81 /src/libs/installer/packagemanagercore_p.cpp | |
parent | 77b1e168202e8781ddfe5c06fc1ceaea5934e855 (diff) |
Rewrite binary layout read/ write implementation.
Move BinaryLayout into its own file. Calculate the segment
offsets in place instead of letting the caller do the work.
Adjust autotest to match the new behavior. Adjust uses to
the new behavior.
Change-Id: Iba7a4398bd097f1768c33f0c528efd12b7458541
Reviewed-by: Kai Koehne <kai.koehne@digia.com>
Diffstat (limited to 'src/libs/installer/packagemanagercore_p.cpp')
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index c9cd458a6..e182d1159 100644 --- a/src/libs/installer/packagemanagercore_p.cpp +++ b/src/libs/installer/packagemanagercore_p.cpp @@ -43,6 +43,7 @@ #include "adminauthorization.h" #include "binarycontent.h" #include "binaryformatenginehandler.h" +#include "binarylayout.h" #include "component.h" #include "scriptengine.h" #include "componentmodel.h" @@ -1114,7 +1115,7 @@ void PackageManagerCorePrivate::writeMaintenanceToolBinaryData(QFileDevice *outp const qint64 dataBlockStart = output->pos(); QVector<Range<qint64> >resourceSegments; - QVector<Range<qint64> >existingResourceSegments = layout.metadataResourceSegments; + QVector<Range<qint64> >existingResourceSegments = layout.metaResourceSegments; const QString newDefaultResource = m_core->value(QString::fromLatin1("DefaultResourceReplacement")); if (!newDefaultResource.isEmpty()) { @@ -1168,7 +1169,7 @@ void PackageManagerCorePrivate::writeMaintenanceToolBinaryData(QFileDevice *outp QInstaller::appendInt64Range(output, segment.moved(-dataBlockStart)); QInstaller::appendInt64Range(output, Range<qint64>::fromStartAndEnd(operationsStart, operationsEnd) .moved(-dataBlockStart)); - QInstaller::appendInt64(output, layout.resourceCount); + QInstaller::appendInt64(output, layout.metaResourceSegments.count()); // data block size, from end of .exe to end of file QInstaller::appendInt64(output, output->pos() + 3 * sizeof(qint64) -dataBlockStart); QInstaller::appendInt64(output, BinaryContent::MagicUninstallerMarker); @@ -1368,7 +1369,8 @@ void PackageManagerCorePrivate::writeMaintenanceTool(OperationList performedOper layout = BinaryContent::binaryLayout(&input, BinaryContent::MagicCookie); if (!newBinaryWritten) { newBinaryWritten = true; - writeMaintenanceToolBinary(&input, layout.endOfData - layout.dataBlockSize, true); + writeMaintenanceToolBinary(&input, layout.endOfBinaryContent + - layout.binaryContentSize, true); } #endif } @@ -1402,7 +1404,8 @@ void PackageManagerCorePrivate::writeMaintenanceTool(OperationList performedOper QFile tmp(isInstaller() ? installerBinaryPath() : maintenanceToolName()); QInstaller::openForRead(&tmp); BinaryLayout tmpLayout = BinaryContent::binaryLayout(&tmp, BinaryContent::MagicCookie); - writeMaintenanceToolBinary(&tmp, tmpLayout.endOfData - tmpLayout.dataBlockSize, false); + writeMaintenanceToolBinary(&tmp, tmpLayout.endOfBinaryContent + - tmpLayout.binaryContentSize, false); } QFile file(maintenanceToolName() + QLatin1String(".new")); |