From 20c13c655e0cdd25d21d562d1d44988107a20711 Mon Sep 17 00:00:00 2001 From: Paul Kocialkowski Date: Mon, 11 Nov 2013 21:10:43 +0100 Subject: Properly handle missing firmwares Change-Id: I47d7d59c49d06149cbf27e0ac570188b451197f8 Signed-off-by: Paul Kocialkowski --- hci/src/bt_hw.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'hci/src/bt_hw.c') 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; } -- cgit v1.1