Line data Source code
1 : #include "cJSON_alloc.h" 2 : #include "cJSON.h" 3 : 4 : #include "../../util/fd_util_base.h" 5 : 6 : #include <stddef.h> 7 : 8 : static ulong g_initialized; 9 : static FD_TL fd_alloc_t * cjson_alloc_ctx; 10 : 11 : static void * 12 0 : cjson_alloc( ulong sz ) { 13 0 : return fd_alloc_malloc( cjson_alloc_ctx, alignof(max_align_t), sz ); 14 0 : } 15 : 16 : static void 17 0 : cjson_free( void * ptr ) { 18 0 : fd_alloc_free( cjson_alloc_ctx, ptr ); 19 0 : } 20 : 21 : void 22 0 : cJSON_alloc_install( fd_alloc_t * alloc ) { 23 0 : cjson_alloc_ctx = alloc; 24 : 25 0 : if( FD_ATOMIC_CAS( &g_initialized, 0UL, 1UL )==0UL ) { 26 0 : cJSON_Hooks hooks = { 27 0 : .malloc_fn = cjson_alloc, 28 0 : .free_fn = cjson_free, 29 0 : }; 30 0 : cJSON_InitHooks( &hooks ); 31 0 : } else { 32 0 : while( g_initialized!=1UL ) FD_SPIN_PAUSE(); 33 0 : } 34 0 : }