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 86079 : cjson_alloc( ulong sz ) { 13 86079 : return fd_alloc_malloc( cjson_alloc_ctx, alignof(max_align_t), sz ); 14 86079 : } 15 : 16 : static void 17 86079 : cjson_free( void * ptr ) { 18 86079 : fd_alloc_free( cjson_alloc_ctx, ptr ); 19 86079 : } 20 : 21 : void 22 3 : cJSON_alloc_install( fd_alloc_t * alloc ) { 23 3 : cjson_alloc_ctx = alloc; 24 : 25 3 : if( FD_ATOMIC_CAS( &g_initialized, 0UL, 1UL )==0UL ) { 26 3 : cJSON_Hooks hooks = { 27 3 : .malloc_fn = cjson_alloc, 28 3 : .free_fn = cjson_free, 29 3 : }; 30 3 : cJSON_InitHooks( &hooks ); 31 3 : } else { 32 0 : while( g_initialized!=1UL ) FD_SPIN_PAUSE(); 33 0 : } 34 3 : }