From 695a1b248a193f9a403d76d3b32666240ee76fcc Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 4 Jul 2013 16:37:24 +0200 Subject: [PATCH] repository writer: fix use of incorrect header size The header size of the package file header was used, which resulted in broken repository files. --- headers/private/package/hpkg/WriterImplBase.h | 2 +- src/kits/package/hpkg/PackageWriterImpl.cpp | 3 ++- src/kits/package/hpkg/RepositoryWriterImpl.cpp | 3 ++- src/kits/package/hpkg/WriterImplBase.cpp | 6 +++--- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/headers/private/package/hpkg/WriterImplBase.h b/headers/private/package/hpkg/WriterImplBase.h index 84a9a0e3b3..e9569325ad 100644 --- a/headers/private/package/hpkg/WriterImplBase.h +++ b/headers/private/package/hpkg/WriterImplBase.h @@ -100,7 +100,7 @@ protected: typedef DoublyLinkedList PackageAttributeList; protected: - status_t Init(const char* fileName, + status_t Init(const char* fileName, size_t headerSize, const BPackageWriterParameters& parameters); void RegisterPackageInfo( diff --git a/src/kits/package/hpkg/PackageWriterImpl.cpp b/src/kits/package/hpkg/PackageWriterImpl.cpp index 228e1db905..c182604845 100644 --- a/src/kits/package/hpkg/PackageWriterImpl.cpp +++ b/src/kits/package/hpkg/PackageWriterImpl.cpp @@ -606,7 +606,8 @@ status_t PackageWriterImpl::_Init(const char* fileName, const BPackageWriterParameters& parameters) { - status_t result = inherited::Init(fileName, parameters); + status_t result = inherited::Init(fileName, sizeof(hpkg_header), + parameters); if (result != B_OK) return result; diff --git a/src/kits/package/hpkg/RepositoryWriterImpl.cpp b/src/kits/package/hpkg/RepositoryWriterImpl.cpp index d99373ad45..921f1fbf82 100644 --- a/src/kits/package/hpkg/RepositoryWriterImpl.cpp +++ b/src/kits/package/hpkg/RepositoryWriterImpl.cpp @@ -250,7 +250,8 @@ RepositoryWriterImpl::Finish() status_t RepositoryWriterImpl::_Init(const char* fileName) { - return inherited::Init(fileName, BPackageWriterParameters()); + return inherited::Init(fileName, sizeof(hpkg_repo_header), + BPackageWriterParameters()); } diff --git a/src/kits/package/hpkg/WriterImplBase.cpp b/src/kits/package/hpkg/WriterImplBase.cpp index 21f8d40d43..66a853f679 100644 --- a/src/kits/package/hpkg/WriterImplBase.cpp +++ b/src/kits/package/hpkg/WriterImplBase.cpp @@ -243,7 +243,7 @@ WriterImplBase::~WriterImplBase() status_t -WriterImplBase::Init(const char* fileName, +WriterImplBase::Init(const char* fileName, size_t headerSize, const BPackageWriterParameters& parameters) { fParameters = parameters; @@ -266,8 +266,8 @@ WriterImplBase::Init(const char* fileName, fFileName = fileName; // create heap writer - fHeapWriter = new PackageFileHeapWriter(fErrorOutput, FD(), - sizeof(hpkg_header), fParameters.CompressionLevel()); + fHeapWriter = new PackageFileHeapWriter(fErrorOutput, FD(), headerSize, + fParameters.CompressionLevel()); fHeapWriter->Init(); fDataWriter = fHeapWriter->DataWriter();