Message: Allow prepend method to allocate additional memory for reserved space. (#862)

This commit is contained in:
Łukasz Duda
2016-10-21 15:00:31 -07:00
committed by Jonathan Hui
parent 35e7fbf733
commit 746ab67e4d
+17 -1
View File
@@ -271,8 +271,24 @@ exit:
ThreadError Message::Prepend(const void *aBuf, uint16_t aLength)
{
ThreadError error = kThreadError_None;
Buffer *newBuffer = NULL;
VerifyOrExit(aLength <= GetReserved(), error = kThreadError_NoBufs);
while (aLength > GetReserved())
{
VerifyOrExit((newBuffer = GetMessagePool()->NewBuffer()) != NULL, error = kThreadError_NoBufs);
newBuffer->SetNextBuffer(GetNextBuffer());
SetNextBuffer(newBuffer);
if (GetReserved() < sizeof(mHeadData))
{
// Copy payload from the first buffer.
memcpy(newBuffer->mHeadData + GetReserved(), mHeadData + GetReserved(),
sizeof(mHeadData) - GetReserved());
}
SetReserved(GetReserved() + kBufferDataSize);
}
SetReserved(GetReserved() - aLength);
mInfo.mLength += aLength;