bool dynamic_link( const char* library, const dynamic_link_descriptor descriptors[], size_t required, dynamic_link_handle *handle, int flags ) { atomic_once( &init_dl_data, init_dl_data_state ); // TODO: May global_symbols_link find weak symbols? dynamic_link_handle library_handle = ( flags & DYNAMIC_LINK_GLOBAL ) ? global_symbols_link( library, descriptors, required ) : 0; if ( !library_handle && ( flags & DYNAMIC_LINK_LOAD ) ) library_handle = dynamic_load( library, descriptors, required ); if ( !library_handle && ( flags & DYNAMIC_LINK_WEAK ) ) return weak_symbol_link( descriptors, required ); save_library_handle( library_handle, handle ); return true; }
static size_t abs_path( char const * name, char * path, size_t len ) { atomic_once( &init_dl_data, init_dl_data_state ); if ( !ap_data._len ) return 0; size_t name_len = strlen( name ); size_t full_len = name_len+ap_data._len; if ( full_len < len ) { strncpy( path, ap_data._path, ap_data._len ); strncpy( path+ap_data._len, name, name_len ); path[full_len] = 0; } return full_len; }
void init_dynamic_link_data() { #if __TBB_DYNAMIC_LOAD_ENABLED atomic_once( &init_dl_data, init_dl_data_state ); #endif }
static_init_dl_data_t() { atomic_once( &init_dl_data, init_dl_data_state ); }
_static_init_dl_data() { #if __USE_STATIC_DL_INIT atomic_once( &init_dl_data, init_dl_data_state ); #endif }