bool btstack_try_load() { assert(sizeof(void**) == sizeof(void(*)())); if (btstack_tested) return btstack_loaded; RARCH_LOG("BTstack: Attempting to load\n"); btstack_tested = true; btstack_loaded = false; void* btstack = dlopen("/usr/lib/libBTstack.dylib", RTLD_LAZY); if (!btstack) { RARCH_LOG("BTstack: /usr/lib/libBTstack.dylib not loadable\n"); RARCH_LOG("BTstack: Not loaded\n"); return false; } for (int i = 0; grabbers[i].name; i ++) { *grabbers[i].target = dlsym(btstack, grabbers[i].name); if (!*grabbers[i].target) { RARCH_LOG("BTstack: Symbol %s not found in /usr/lib/libBTstack.dylib\n", grabbers[i].name); RARCH_LOG("BTstack: Not loaded\n"); dlclose(btstack); return false; } } run_loop_init_ptr(RUN_LOOP_COCOA); bt_register_packet_handler_ptr(btpad_packet_handler); RARCH_LOG("BTstack: Loaded\n"); btstack_loaded = true; return true; }
static bool btstack_try_load(void) { #ifdef HAVE_DYNAMIC unsigned i; #endif void *handle = NULL; if (btstack_tested) return btstack_loaded; btstack_tested = true; btstack_loaded = false; handle = btstack_get_handle(); if (!handle) return false; #ifdef HAVE_DYNAMIC for (i = 0; grabbers[i].name; i ++) { *grabbers[i].target = dylib_proc(handle, grabbers[i].name); if (!*grabbers[i].target) { dylib_close(handle); return false; } } #endif #if defined(HAVE_COCOA) || defined(HAVE_COCOATOUCH) run_loop_init_ptr(RUN_LOOP_COCOA); #else run_loop_init_ptr(RUN_LOOP_POSIX); #endif bt_register_packet_handler_ptr(btpad_packet_handler); btstack_loaded = true; return true; }