31 lines
1.3 KiB
Diff
31 lines
1.3 KiB
Diff
--- exiv2-0.26.orig/src/basicio.cpp.orig 2017-04-26 21:16:21.000000000 +0200
|
|
+++ exiv2-0.26.orig/src/basicio.cpp 2018-01-12 17:11:54.815825700 +0100
|
|
@@ -1093,10 +1093,12 @@
|
|
void MemIo::Impl::reserve(long wcount)
|
|
{
|
|
long need = wcount + idx_;
|
|
+ long blockSize = 32*1024; // 32768 `
|
|
+ long maxBlockSize = 4*1024*1024;
|
|
|
|
if (!isMalloced_) {
|
|
- // Minimum size for 1st block is 32kB
|
|
- long size = EXV_MAX(32768 * (1 + need / 32768), size_);
|
|
+ // Minimum size for 1st block
|
|
+ long size = EXV_MAX(blockSize * (1 + need / blockSize), size_);
|
|
byte* data = (byte*)std::malloc(size);
|
|
std::memcpy(data, data_, size_);
|
|
data_ = data;
|
|
@@ -1106,8 +1108,10 @@
|
|
|
|
if (need > size_) {
|
|
if (need > sizeAlloced_) {
|
|
- // Allocate in blocks of 32kB
|
|
- long want = 32768 * (1 + need / 32768);
|
|
+ blockSize = 2*sizeAlloced_ ;
|
|
+ if ( blockSize > maxBlockSize ) blockSize = maxBlockSize ;
|
|
+ // Allocate in blocks
|
|
+ long want = blockSize * (1 + need / blockSize );
|
|
data_ = (byte*)std::realloc(data_, want);
|
|
sizeAlloced_ = want;
|
|
isMalloced_ = true;
|