alloc.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "private-libwebsockets.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)
  19. {
  20. return TEE_Realloc(ptr, size);
  21. }
  22. void *lws_malloc(size_t size)
  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)
  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))
  38. {
  39. (void)cb;
  40. }
  41. #else
  42. static void *_realloc(void *ptr, size_t size)
  43. {
  44. if (size)
  45. #if defined(LWS_PLAT_OPTEE)
  46. return (void *)TEE_Realloc(ptr, size);
  47. #else
  48. return (void *)realloc(ptr, size);
  49. #endif
  50. else if (ptr)
  51. free(ptr);
  52. return NULL;
  53. }
  54. void *(*_lws_realloc)(void *ptr, size_t size) = _realloc;
  55. void *lws_realloc(void *ptr, size_t size)
  56. {
  57. return _lws_realloc(ptr, size);
  58. }
  59. void *lws_zalloc(size_t size)
  60. {
  61. void *ptr = _lws_realloc(NULL, size);
  62. if (ptr)
  63. memset(ptr, 0, size);
  64. return ptr;
  65. }
  66. void lws_set_allocator(void *(*cb)(void *ptr, size_t size))
  67. {
  68. _lws_realloc = cb;
  69. }
  70. #endif