forked from bblanchon/ArduinoJson
AllocatorLog: support nulls in deallocate()
and reallocate()
This commit is contained in:
@ -109,18 +109,17 @@ class SpyingAllocator : public ArduinoJson::Allocator {
|
||||
|
||||
void deallocate(void* p) override {
|
||||
auto block = AllocatedBlock::fromPayload(p);
|
||||
log_ << AllocatorLog::Deallocate(block->size);
|
||||
log_ << AllocatorLog::Deallocate(block ? block->size : 0);
|
||||
upstream_->deallocate(block);
|
||||
}
|
||||
|
||||
void* reallocate(void* p, size_t n) override {
|
||||
auto block = AllocatedBlock::fromPayload(p);
|
||||
auto oldSize = block->size;
|
||||
auto oldSize = block ? block->size : 0;
|
||||
block = reinterpret_cast<AllocatedBlock*>(
|
||||
upstream_->reallocate(block, sizeof(AllocatedBlock) + n - 1));
|
||||
if (block) {
|
||||
log_ << AllocatorLog::Reallocate(oldSize, n);
|
||||
ARDUINOJSON_ASSERT(block->size == oldSize);
|
||||
block->size = n;
|
||||
return block->payload;
|
||||
} else {
|
||||
@ -143,6 +142,8 @@ class SpyingAllocator : public ArduinoJson::Allocator {
|
||||
char payload[1];
|
||||
|
||||
static AllocatedBlock* fromPayload(void* p) {
|
||||
if (!p)
|
||||
return nullptr;
|
||||
return reinterpret_cast<AllocatedBlock*>(
|
||||
// Cast to void* to silence "cast increases required alignment of
|
||||
// target type [-Werror=cast-align]"
|
||||
|
Reference in New Issue
Block a user