diff options
Diffstat (limited to 'src/zencore/iohash.cpp')
| -rw-r--r-- | src/zencore/iohash.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/zencore/iohash.cpp b/src/zencore/iohash.cpp index 77076c133..cedee913a 100644 --- a/src/zencore/iohash.cpp +++ b/src/zencore/iohash.cpp @@ -31,7 +31,23 @@ IoHash::HashBuffer(const CompositeBuffer& Buffer) for (const SharedBuffer& Segment : Buffer.GetSegments()) { - Hasher.Append(Segment.GetData(), Segment.GetSize()); + size_t SegmentSize = Segment.GetSize(); + if (SegmentSize >= (65536 + 32768) && Segment.IsFileReference()) + { + const IoBuffer SegmentBuffer = Segment.AsIoBuffer(); + size_t Offset = 0; + while (Offset < SegmentSize) + { + size_t ChunkSize = Min<size_t>(SegmentSize - Offset, 65536u); + IoBuffer SubRange(SegmentBuffer, Offset, ChunkSize); + Hasher.Append(SubRange.GetData(), ChunkSize); + Offset += ChunkSize; + } + } + else + { + Hasher.Append(Segment.GetData(), SegmentSize); + } } return Hasher.GetHash(); |