summaryrefslogtreecommitdiffstats
path: root/hci/src/bt_hw.c
diff options
context:
space:
mode:
Diffstat (limited to 'hci/src/bt_hw.c')
-rw-r--r--hci/src/bt_hw.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/hci/src/bt_hw.c b/hci/src/bt_hw.c
index b2a099f..f2b7b71 100644
--- a/hci/src/bt_hw.c
+++ b/hci/src/bt_hw.c
@@ -184,24 +184,33 @@ static const bt_vendor_callbacks_t vnd_callbacks = {
** Returns None
**
******************************************************************************/
-void init_vnd_if(unsigned char *local_bdaddr)
+int init_vnd_if(unsigned char *local_bdaddr)
{
void *dlhandle;
+ int rc;
dlhandle = dlopen("libbt-vendor.so", RTLD_NOW);
if (!dlhandle)
{
ALOGE("!!! Failed to load libbt-vendor.so !!!");
- return;
+ return BT_HC_STATUS_FAIL;
}
bt_vnd_if = (bt_vendor_interface_t *) dlsym(dlhandle, "BLUETOOTH_VENDOR_LIB_INTERFACE");
if (!bt_vnd_if)
{
ALOGE("!!! Failed to get bt vendor interface !!!");
- return;
+ return BT_HC_STATUS_FAIL;
}
- bt_vnd_if->init(&vnd_callbacks, local_bdaddr);
+ rc = bt_vnd_if->init(&vnd_callbacks, local_bdaddr);
+ if (rc < 0) {
+ dlclose(dlhandle);
+ bt_vnd_if = NULL;
+
+ return BT_HC_STATUS_FAIL;
+ }
+
+ return BT_HC_STATUS_SUCCESS;
}