memmgr.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #include "memmgr.h"
  2. #include <string.h>
  3. extern void* pvPortMalloc(size_t xSize);
  4. extern void vPortFree(void* pv);
  5. extern size_t xPortGetFreeHeapSize(void);
  6. extern size_t xPortGetMinimumEverFreeHeapSize(void);
  7. void* malloc(size_t size) {
  8. return pvPortMalloc(size);
  9. }
  10. void free(void* ptr) {
  11. vPortFree(ptr);
  12. }
  13. void* realloc(void* ptr, size_t size) {
  14. if(size == 0) {
  15. vPortFree(ptr);
  16. return NULL;
  17. }
  18. void* p;
  19. p = pvPortMalloc(size);
  20. if(p) {
  21. // TODO implement secure realloc
  22. // insecure, but will do job in our case
  23. if(ptr != NULL) {
  24. memcpy(p, ptr, size);
  25. vPortFree(ptr);
  26. }
  27. }
  28. return p;
  29. }
  30. void* calloc(size_t count, size_t size) {
  31. void* ptr = pvPortMalloc(count * size);
  32. if(ptr) {
  33. // zero the memory
  34. memset(ptr, 0, count * size);
  35. }
  36. return ptr;
  37. }
  38. char* strdup(const char* s) {
  39. const char* s_null = s;
  40. if(s_null == NULL) {
  41. return NULL;
  42. }
  43. size_t siz = strlen(s) + 1;
  44. char* y = malloc(siz);
  45. if(y != NULL) {
  46. memcpy(y, s, siz);
  47. } else {
  48. return NULL;
  49. }
  50. return y;
  51. }
  52. size_t memmgr_get_free_heap(void) {
  53. return xPortGetFreeHeapSize();
  54. }
  55. size_t memmgr_get_minimum_free_heap(void) {
  56. return xPortGetMinimumEverFreeHeapSize();
  57. }
  58. void* __wrap__malloc_r(struct _reent* r, size_t size) {
  59. void* pointer = malloc(size);
  60. return pointer;
  61. }
  62. void __wrap__free_r(struct _reent* r, void* ptr) {
  63. free(ptr);
  64. }
  65. void* __wrap__calloc_r(struct _reent* r, size_t count, size_t size) {
  66. void* pointer = calloc(count, size);
  67. return pointer;
  68. }
  69. void* __wrap__realloc_r(struct _reent* r, void* ptr, size_t size) {
  70. void* pointer = realloc(ptr, size);
  71. return pointer;
  72. }