Browse Source

AP_HAL_ChibiOS: implement standard realloc method

c415-sdk
bugobliterator 5 years ago committed by Andrew Tridgell
parent
commit
89d03f0243
  1. 20
      libraries/AP_HAL_ChibiOS/Util.cpp
  2. 1
      libraries/AP_HAL_ChibiOS/Util.h

20
libraries/AP_HAL_ChibiOS/Util.cpp

@ -86,6 +86,26 @@ void *Util::allocate_heap_memory(size_t size) @@ -86,6 +86,26 @@ void *Util::allocate_heap_memory(size_t size)
return heap;
}
/*
realloc implementation thanks to wolfssl, used by AP_Scripting
*/
void *Util::std_realloc(void *addr, size_t size)
{
if (size == 0) {
free(addr);
return nullptr;
}
if (addr == nullptr) {
return malloc(size);
}
void *new_mem = malloc(size);
if (new_mem != nullptr) {
memcpy(new_mem, addr, chHeapGetSize(addr) > size ? size : chHeapGetSize(addr));
free(addr);
}
return new_mem;
}
void *Util::heap_realloc(void *heap, void *ptr, size_t new_size)
{
if (heap == nullptr) {

1
libraries/AP_HAL_ChibiOS/Util.h

@ -38,6 +38,7 @@ public: @@ -38,6 +38,7 @@ public:
// heap functions, note that a heap once alloc'd cannot be dealloc'd
virtual void *allocate_heap_memory(size_t size) override;
virtual void *heap_realloc(void *heap, void *ptr, size_t new_size) override;
virtual void *std_realloc(void *ptr, size_t new_size) override;
#endif // ENABLE_HEAP
/*

Loading…
Cancel
Save