mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-21 21:43:33 +08:00
Dynamic buffer size limitation
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user