Tests: allow ArmoredAllocator to be called multiple times

This commit is contained in:
Benoit Blanchon
2023-04-07 18:27:29 +02:00
parent e9850152a7
commit 22e4f216c3

View File

@ -16,37 +16,25 @@ using ArduinoJson::detail::sizeofString;
class ArmoredAllocator : public Allocator {
public:
ArmoredAllocator() : _ptr(0), _size(0) {}
virtual ~ArmoredAllocator() {}
void* allocate(size_t size) override {
_ptr = malloc(size);
_size = size;
return _ptr;
return malloc(size);
}
void deallocate(void* ptr) override {
REQUIRE(ptr == _ptr);
free(ptr);
_ptr = 0;
_size = 0;
}
void* reallocate(void* ptr, size_t new_size) override {
REQUIRE(ptr == _ptr);
// don't call realloc, instead alloc a new buffer and erase the old one
// this way we make sure we support relocation
void* new_ptr = malloc(new_size);
memcpy(new_ptr, _ptr, std::min(new_size, _size));
memset(_ptr, '#', _size); // erase
free(_ptr);
_ptr = new_ptr;
memset(new_ptr, '#', new_size); // erase
memcpy(new_ptr, ptr, std::min(new_size, new_size));
free(ptr);
return new_ptr;
}
private:
void* _ptr;
size_t _size;
};
TEST_CASE("JsonDocument::shrinkToFit()") {