From 1c613c3623cce7402f3f7b56956a1386a54c13f3 Mon Sep 17 00:00:00 2001 From: zzy Date: Wed, 29 Aug 2012 11:08:24 -0700 Subject: Fixed the issue that local adapter name cannot be changed and lost last bonded device 2 Root case: the adapter name property set/get with wrong section & key; The end condition of the loop to load bonded device is wrong removed the wrong return value check when loading blacklist Change-Id: Ib02d472311cd872befd17e6d2445f649f53f02fb --- btif/src/btif_config.c | 10 ++++++---- btif/src/btif_storage.c | 30 +++++++++++++++--------------- 2 files changed, 21 insertions(+), 19 deletions(-) (limited to 'btif') diff --git a/btif/src/btif_config.c b/btif/src/btif_config.c index 8856b5a..2470110 100644 --- a/btif/src/btif_config.c +++ b/btif/src/btif_config.c @@ -541,9 +541,10 @@ static cfg_node* find_node(const char* section, const char* key, const char* nam static short find_next_node(const cfg_node* p, short start, char* name, int* bytes) { asrt(0 <= start && start < GET_CHILD_MAX_COUNT(p)); - //debug("in"); - //dump_node("parent", p); + //debug("in, start:%d, max child count:%d", start, GET_CHILD_MAX_COUNT(p)); + //dump_node("find_next_node, parent", p); short next = -1; + if(name) *name = 0; if(0 <= start && start < GET_CHILD_MAX_COUNT(p)) { int i; @@ -752,8 +753,9 @@ static void cfg_test_load() kname_size = sizeof(kname); kname[0] = 0; kpos = 0; - while((kpos = btif_config_next_key(kpos, "Remote Devices", kname, &kname_size)) != -1) + do { + kpos = btif_config_next_key(kpos, "Remote Devices", kname, &kname_size); debug("Remote devices:%s, size:%d", kname, kname_size); vpos = 0; vname[0] = 0; @@ -772,7 +774,7 @@ static void cfg_test_load() } kname[0] = 0; kname_size = sizeof(kname); - } + } while(kpos != -1); debug("out"); } static void cfg_test_write() diff --git a/btif/src/btif_storage.c b/btif/src/btif_storage.c index 0110d04..0596ccd 100755 --- a/btif/src/btif_storage.c +++ b/btif/src/btif_storage.c @@ -282,8 +282,11 @@ static int prop2cfg(bt_bdaddr_t *remote_bd_addr, bt_property_t *prop) case BT_PROPERTY_BDNAME: strncpy(value, (char*)prop->val, prop->len); value[prop->len]='\0'; - btif_config_set_str("Remote", bdstr, + if(remote_bd_addr) + btif_config_set_str("Remote", bdstr, BTIF_STORAGE_PATH_REMOTE_NAME, value); + else btif_config_set_str("Local", "Adapter", + BTIF_STORAGE_KEY_ADAPTER_NAME, value); break; case BT_PROPERTY_REMOTE_FRIENDLY_NAME: strncpy(value, (char*)prop->val, prop->len); @@ -351,8 +354,11 @@ static int cfg2prop(bt_bdaddr_t *remote_bd_addr, bt_property_t *prop) case BT_PROPERTY_BDNAME: { int len = prop->len; - ret = btif_config_get_str("Remote", bdstr, + if(remote_bd_addr) + ret = btif_config_get_str("Remote", bdstr, BTIF_STORAGE_PATH_REMOTE_NAME, (char*)prop->val, &len); + else ret = btif_config_get_str("Local", "Adapter", + BTIF_STORAGE_KEY_ADAPTER_NAME, (char*)prop->val, &len); if(ret && len && len <= prop->len) prop->len = len - 1; else @@ -440,8 +446,9 @@ static bt_status_t btif_in_fetch_bonded_devices(btif_bonded_devices_t *p_bonded_ kname_size = sizeof(kname); kname[0] = 0; kpos = 0; - while((kpos = btif_config_next_key(kpos, "Remote", kname, &kname_size)) != -1) + do { + kpos = btif_config_next_key(kpos, "Remote", kname, &kname_size); debug("Remote device:%s, size:%d", kname, kname_size); int type = BTIF_CFG_TYPE_BIN; LINK_KEY link_key; @@ -470,7 +477,7 @@ static bt_status_t btif_in_fetch_bonded_devices(btif_bonded_devices_t *p_bonded_ else debug("Remote device:%s, no link key", kname); kname_size = sizeof(kname); kname[0] = 0; - } + } while(kpos != -1); debug("out"); return BT_STATUS_SUCCESS; } @@ -527,9 +534,6 @@ static int hex_str_to_int(const char* str, int size) bt_status_t btif_storage_get_adapter_property(bt_property_t *property) { - /* initialize property->len */ - property->len = 0; - /* Special handling for adapter BD_ADDR and BONDED_DEVICES */ if (property->type == BT_PROPERTY_BDADDR) { @@ -931,8 +935,9 @@ bt_status_t btif_storage_load_bonded_hid_info(void) kname[0] = 0; kpos = 0; memset(&dscp_info, 0, sizeof(dscp_info)); - while((kpos = btif_config_next_key(kpos, "Remote", kname, &kname_size)) != -1) + do { + kpos = btif_config_next_key(kpos, "Remote", kname, &kname_size); debug("Remote device:%s, size:%d", kname, kname_size); int value; if(btif_config_get_int("Remote", kname, "HidAttrMask", &value)) @@ -974,7 +979,7 @@ bt_status_t btif_storage_load_bonded_hid_info(void) app_id, dscp_info); } } - } + } while(kpos != -1); return BT_STATUS_SUCCESS; } @@ -1268,7 +1273,7 @@ bt_status_t btif_storage_write_hl_mdl_data(UINT8 app_idx, char *value, int value bt_status_t btif_storage_load_autopair_device_list() { char *key_name, *key_value; - int ret , i=0; + int i=0; char linebuf[BTIF_STORAGE_MAX_LINE_SZ]; char *line; FILE *fp; @@ -1277,11 +1282,6 @@ bt_status_t btif_storage_load_autopair_device_list() { /* first time loading of auto pair blacklist configuration */ - if (ret < 0) - { - ALOGE("%s: Failed to create dynamic auto pair blacklist", __FUNCTION__); - return BT_STATUS_FAIL; - } fp = fopen (BTIF_AUTO_PAIR_CONF_FILE, "r"); if (fp == NULL) -- cgit v1.1