alloc.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "core/private.h"
  2. #if defined(LWS_PLAT_OPTEE)
  3. #define TEE_USER_MEM_HINT_NO_FILL_ZERO 0x80000000
  4. void *__attribute__((weak))
  5. TEE_Malloc(uint32_t size, uint32_t hint)
  6. {
  7. return NULL;
  8. }
  9. void *__attribute__((weak))
  10. TEE_Realloc(void *buffer, uint32_t newSize)
  11. {
  12. return NULL;
  13. }
  14. void __attribute__((weak))
  15. TEE_Free(void *buffer)
  16. {
  17. }
  18. void *lws_realloc(void *ptr, size_t size, const char *reason)
  19. {
  20. return TEE_Realloc(ptr, size);
  21. }
  22. void *lws_malloc(size_t size, const char *reason)
  23. {
  24. return TEE_Malloc(size, TEE_USER_MEM_HINT_NO_FILL_ZERO);
  25. }
  26. void lws_free(void *p)
  27. {
  28. TEE_Free(p);
  29. }
  30. void *lws_zalloc(size_t size, const char *reason)
  31. {
  32. void *ptr = TEE_Malloc(size, TEE_USER_MEM_HINT_NO_FILL_ZERO);
  33. if (ptr)
  34. memset(ptr, 0, size);
  35. return ptr;
  36. }
  37. void lws_set_allocator(void *(*cb)(void *ptr, size_t size, const char *reason))
  38. {
  39. (void)cb;
  40. }
  41. #else
  42. static void *_realloc(void *ptr, size_t size, const char *reason)
  43. {
  44. if (size) {
  45. #if defined(LWS_WITH_ESP32)
  46. lwsl_notice("%s: size %lu: %s (free heap %d)\n", __func__,
  47. (unsigned long)size, reason, (unsigned int)esp_get_free_heap_size() - (int)size);
  48. #else
  49. lwsl_debug("%s: size %lu: %s\n", __func__,
  50. (unsigned long)size, reason);
  51. #endif
  52. #if defined(LWS_PLAT_OPTEE)
  53. return (void *)TEE_Realloc(ptr, size);
  54. #else
  55. return (void *)realloc(ptr, size);
  56. #endif
  57. }
  58. if (ptr)
  59. free(ptr);
  60. return NULL;
  61. }
  62. void *(*_lws_realloc)(void *ptr, size_t size, const char *reason) = _realloc;
  63. void *lws_realloc(void *ptr, size_t size, const char *reason)
  64. {
  65. return _lws_realloc(ptr, size, reason);
  66. }
  67. void *lws_zalloc(size_t size, const char *reason)
  68. {
  69. void *ptr = _lws_realloc(NULL, size, reason);
  70. if (ptr)
  71. memset(ptr, 0, size);
  72. return ptr;
  73. }
  74. void lws_set_allocator(void *(*cb)(void *ptr, size_t size, const char *reason))
  75. {
  76. _lws_realloc = cb;
  77. }
  78. #endif