diff options
| author | Dan Engelbrecht <[email protected]> | 2025-11-27 10:22:16 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-11-27 10:22:16 +0100 |
| commit | 48d5495d5b53497f540f00929c2764bf5c13a58f (patch) | |
| tree | 90dcdf69c0bb9823155f22f31eece9e0e6b70584 /src/zencore/compress.cpp | |
| parent | RawOffset can be anything and we expect an empty buffer to be returned along ... (diff) | |
| download | zen-48d5495d5b53497f540f00929c2764bf5c13a58f.tar.xz zen-48d5495d5b53497f540f00929c2764bf5c13a58f.zip | |
fix stream decompress (#668)
* fix source file offset in DecompressToStream implementations
Diffstat (limited to 'src/zencore/compress.cpp')
| -rw-r--r-- | src/zencore/compress.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/zencore/compress.cpp b/src/zencore/compress.cpp index 84af83119..0c53a8000 100644 --- a/src/zencore/compress.cpp +++ b/src/zencore/compress.cpp @@ -342,14 +342,18 @@ public: { ZEN_ASSERT(FileRef.FileHandle != nullptr); uint64_t CallbackOffset = 0; - ScanFile(FileRef.FileHandle, sizeof(BufferHeader) + RawOffset, RawSize, 512u * 1024u, [&](const void* Data, size_t Size) { - if (Result) - { - CompositeBuffer Tmp(SharedBuffer::MakeView(Data, Size)); - Result = Callback(sizeof(BufferHeader) + RawOffset + CallbackOffset, Size, CallbackOffset, Tmp); - } - CallbackOffset += Size; - }); + ScanFile(FileRef.FileHandle, + FileRef.FileChunkOffset + sizeof(BufferHeader) + RawOffset, + RawSize, + 512u * 1024u, + [&](const void* Data, size_t Size) { + if (Result) + { + CompositeBuffer Tmp(SharedBuffer::MakeView(Data, Size)); + Result = Callback(sizeof(BufferHeader) + RawOffset + CallbackOffset, Size, CallbackOffset, Tmp); + } + CallbackOffset += Size; + }); return Result; } else @@ -892,7 +896,7 @@ BlockDecoder::DecompressToStream( Source.Detach(); return false; } - if (!Callback(FileRef.FileChunkOffset + CompressedOffset, + if (!Callback(CompressedOffset, CompressedBlockSize, BlockIndex * BlockSize + OffsetInFirstBlock, CompositeBuffer(IoBuffer(IoBuffer::Wrap, RawDataBuffer.GetData(), BytesToUncompress)))) @@ -904,7 +908,7 @@ BlockDecoder::DecompressToStream( else { if (!Callback( - FileRef.FileChunkOffset + CompressedOffset, + CompressedOffset, BytesToUncompress, BlockIndex * BlockSize + OffsetInFirstBlock, CompositeBuffer( |