From e2f30519ab5b526d1e5b603f847c4fc3d18af111 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 25 May 2013 01:55:36 +0200 Subject: [PATCH] hpkg format: user big endian for chunk sizes --- src/kits/package/hpkg/PackageFileHeapAccessorBase.cpp | 3 ++- src/kits/package/hpkg/PackageFileHeapWriter.cpp | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/kits/package/hpkg/PackageFileHeapAccessorBase.cpp b/src/kits/package/hpkg/PackageFileHeapAccessorBase.cpp index 78461ad94d..024b8f21e9 100644 --- a/src/kits/package/hpkg/PackageFileHeapAccessorBase.cpp +++ b/src/kits/package/hpkg/PackageFileHeapAccessorBase.cpp @@ -13,6 +13,7 @@ #include #include +#include #include #include @@ -62,7 +63,7 @@ PackageFileHeapAccessorBase::OffsetArray::InitChunksOffsets( uint64 offset = (*this)[baseIndex]; for (size_t i = 0; i < chunkCount; i++) { - offset += (uint64)chunkSizes[i] + 1; + offset += (uint64)B_BENDIAN_TO_HOST_INT16(chunkSizes[i]) + 1; // the stored value is chunkSize - 1 size_t index = baseIndex + i + 1; // (baseIndex + i) is the index of the chunk whose size is stored in diff --git a/src/kits/package/hpkg/PackageFileHeapWriter.cpp b/src/kits/package/hpkg/PackageFileHeapWriter.cpp index 7bf45fa1b4..d4a12e46e7 100644 --- a/src/kits/package/hpkg/PackageFileHeapWriter.cpp +++ b/src/kits/package/hpkg/PackageFileHeapWriter.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -439,8 +440,8 @@ PackageFileHeapWriter::Finish() for (ssize_t i = 0; i < toWrite; i++, offsetIndex++) { // store chunkSize - 1, so it fits 16 bit (chunks cannot be empty) - buffer[i] = uint16(fOffsets[offsetIndex] - fOffsets[offsetIndex - 1] - - 1); + buffer[i] = B_HOST_TO_BENDIAN_INT16( + uint16(fOffsets[offsetIndex] - fOffsets[offsetIndex - 1] - 1)); } error = _WriteDataUncompressed(buffer, toWrite * 2);