diff options
| -rw-r--r-- | hcid/dbus-manager.c | 10 | ||||
| -rw-r--r-- | hcid/main.c | 23 | 
2 files changed, 27 insertions, 6 deletions
| diff --git a/hcid/dbus-manager.c b/hcid/dbus-manager.c index 68c732f5..695b3112 100644 --- a/hcid/dbus-manager.c +++ b/hcid/dbus-manager.c @@ -103,6 +103,7 @@ static DBusHandlerResult find_adapter(DBusConnection *conn,  {  	DBusMessage *reply;  	char path[MAX_PATH_LENGTH], *path_ptr = path; +	struct hci_dev_info di;  	const char *pattern;  	int dev_id; @@ -115,6 +116,12 @@ static DBusHandlerResult find_adapter(DBusConnection *conn,  	if (dev_id < 0)  		return error_no_such_adapter(conn, msg); +	if (hci_devinfo(dev_id, &di) < 0) +		return error_no_such_adapter(conn, msg); + +	if (hci_test_bit(HCI_RAW, &di.flags)) +		return error_no_such_adapter(conn, msg); +  	reply = dbus_message_new_method_return(msg);  	if (!reply)  		return DBUS_HANDLER_RESULT_NEED_MEMORY; @@ -177,6 +184,9 @@ static DBusHandlerResult list_adapters(DBusConnection *conn,  		if (hci_devinfo(dr->dev_id, &di) < 0)  			continue; +		if (hci_test_bit(HCI_RAW, &di.flags)) +			continue; +  		snprintf(path, sizeof(path), "%s/%s", BASE_PATH, di.name);  		dbus_message_iter_append_basic(&array_iter, diff --git a/hcid/main.c b/hcid/main.c index b58861a6..61d2fecd 100644 --- a/hcid/main.c +++ b/hcid/main.c @@ -523,14 +523,14 @@ static void init_device(int dev_id)  	if (ioctl(dd, HCIDEVUP, dev_id) < 0 && errno != EALREADY) {  		error("Can't init device hci%d: %s (%d)",  					dev_id, strerror(errno), errno); -		exit(1); +		goto fail;  	}  	if (hci_devinfo(dev_id, &di) < 0) -		exit(1); +		goto fail;  	if (hci_test_bit(HCI_RAW, &di.flags)) -		exit(0); +		goto done;  	if (hcid.offmode == HCID_OFFMODE_DEVDOWN) {  		char mode[16]; @@ -538,20 +538,31 @@ static void init_device(int dev_id)  		if (read_device_mode(&di.bdaddr, mode, sizeof(mode)) == 0 &&  						strcmp(mode, "off") == 0) {  			ioctl(dd, HCIDEVDOWN, dev_id); -			exit(0); +			goto done;  		}  	} +done:  	hci_close_dev(dd); -  	exit(0); + +fail: +	hci_close_dev(dd); +	exit(1);  }  static void device_devreg_setup(int dev_id)  { +	struct hci_dev_info di; +  	if (hcid.auto_init)  		init_device(dev_id); -	hcid_dbus_register_device(dev_id); + +	if (hci_devinfo(dev_id, &di) < 0) +		return; + +	if (!hci_test_bit(HCI_RAW, &di.flags)) +		hcid_dbus_register_device(dev_id);  }  static void device_devup_setup(int dev_id) | 
