diff options
| author | Marcel Holtmann <marcel@holtmann.org> | 2008-09-29 10:49:09 +0200 | 
|---|---|---|
| committer | Marcel Holtmann <marcel@holtmann.org> | 2008-09-29 10:49:09 +0200 | 
| commit | c4c130d3922dedc992e00fbf94bde64a180306c2 (patch) | |
| tree | eb7c2441c5942ff98b73e8d81bf7b6b6577b8c58 | |
| parent | 915c467ef1421a3999a8355d58f71521ac98696e (diff) | |
Fix duplicate entries for service UUIDs
| -rw-r--r-- | src/device.c | 25 | 
1 files changed, 17 insertions, 8 deletions
| diff --git a/src/device.c b/src/device.c index db769e21..49c6e80a 100644 --- a/src/device.c +++ b/src/device.c @@ -715,9 +715,15 @@ void device_probe_drivers(struct btd_device *device, GSList *uuids, sdp_list_t *  		}  	} -	for (list = uuids; list; list = list->next) +	for (list = uuids; list; list = list->next) { +		GSList *l = g_slist_find_custom(device->uuids, list->data, +							(GCompareFunc) strcmp); +		if (l) +			continue; +  		device->uuids = g_slist_insert_sorted(device->uuids, -				list->data, (GCompareFunc) strcmp); +					list->data, (GCompareFunc) strcmp); +	}  }  void device_remove_drivers(struct btd_device *device, GSList *uuids, sdp_list_t *recs) @@ -966,13 +972,13 @@ static void update_services(struct browse_req *req, sdp_list_t *recs)  		}  		l = g_slist_find_custom(device->uuids, uuid_str, -				(GCompareFunc) strcmp); +							(GCompareFunc) strcmp);  		if (!l)  			req->uuids_added = g_slist_append(req->uuids_added, -					uuid_str); +								uuid_str);  		else {  			req->uuids_removed = g_slist_remove(req->uuids_removed, -					l->data); +								l->data);  			g_free(uuid_str);  		} @@ -1104,7 +1110,8 @@ static void browse_cb(sdp_list_t *recs, int err, gpointer user_data)  	/* Search for mandatory uuids */  	if (uuid_list[req->search_uuid]) {  		sdp_uuid16_create(&uuid, uuid_list[req->search_uuid++]); -		bt_search_service(&src, &device->bdaddr, &uuid, browse_cb, user_data, NULL); +		bt_search_service(&src, &device->bdaddr, &uuid, +						browse_cb, user_data, NULL);  		return;  	} @@ -1115,14 +1122,16 @@ static void browse_cb(sdp_list_t *recs, int err, gpointer user_data)  		bt_string2uuid(&uuid, uuid_str);  		req->uuids = g_slist_remove(req->uuids, uuid_str);  		g_free(uuid_str); -		bt_search_service(&src, &device->bdaddr, &uuid, browse_cb, user_data, NULL); +		bt_search_service(&src, &device->bdaddr, &uuid, +						browse_cb, user_data, NULL);  		return;  	}  	/* Search for l2cap uuid */  	if (!req->records) {  		sdp_uuid16_create(&uuid, L2CAP_UUID); -		bt_search_service(&src, &device->bdaddr, &uuid, search_cb, user_data, NULL); +		bt_search_service(&src, &device->bdaddr, &uuid, +						search_cb, user_data, NULL);  		return;  	} | 
