Dynamic buffer size limitation

This commit is contained in:
Pavel Kirienko
2014-02-11 21:26:18 +04:00
parent 031f90f326
commit 5be2801fa1
3 changed files with 42 additions and 31 deletions
+8 -2
View File
@@ -74,13 +74,13 @@ void DynamicTransferBuffer::Block::write(const uint8_t*& inptr, unsigned int tar
/*
* DynamicTransferBuffer
*/
DynamicTransferBuffer* DynamicTransferBuffer::instantiate(IAllocator* allocator)
DynamicTransferBuffer* DynamicTransferBuffer::instantiate(IAllocator* allocator, unsigned int max_size)
{
assert(allocator);
void* const praw = allocator->allocate(sizeof(DynamicTransferBuffer));
if (praw == NULL)
return NULL;
return new (praw) DynamicTransferBuffer(allocator);
return new (praw) DynamicTransferBuffer(allocator, max_size);
}
void DynamicTransferBuffer::destroy(DynamicTransferBuffer*& obj, IAllocator* allocator)
@@ -144,6 +144,12 @@ int DynamicTransferBuffer::write(unsigned int offset, const uint8_t* data, unsig
return -1;
}
if (offset >= max_size_)
return 0;
if ((offset + len) > max_size_)
len = max_size_ - offset;
assert((offset + len) <= max_size_);
unsigned int total_offset = 0, left_to_write = len;
const uint8_t* inptr = data;
Block* p = blocks_.get(), *last_written_block = NULL;