Diff between 8a7c267e36a83245999dc374b627a889acd694f0 and fa73398ae61e055f7e4bc53614fe2760ed102b7f

Changed Files

File Additions Deletions Status
plugins/wiimote.c +6 -1 modified
src/adapter.c +1 -1 modified
src/adapter.h +2 -1 modified

Full Patch

diff --git a/plugins/wiimote.c b/plugins/wiimote.c
index 90d6d7b..12312b6 100644
--- a/plugins/wiimote.c
+++ b/plugins/wiimote.c
@@ -70,12 +70,17 @@ static const char *wii_names[] = {
 };
 
 static ssize_t wii_pincb(struct btd_adapter *adapter, struct btd_device *device,
-						char *pinbuf, gboolean *display)
+			char *pinbuf, gboolean *display, unsigned int attempt)
 {
 	uint16_t vendor, product;
 	char addr[18], name[25];
 	unsigned int i;
 
+	/* Only try the pin code once per device. If it's not correct then it's
+	 * an unknown device. */
+	if (attempt > 1)
+		return 0;
+
 	ba2str(device_get_address(device), addr);
 
 	vendor = btd_device_get_vendor(device);
diff --git a/src/adapter.c b/src/adapter.c
index d6c865c..87e2d90 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -4799,7 +4799,7 @@ static ssize_t btd_adapter_pin_cb_iter_next(
 
 	while (iter->it != NULL) {
 		cb = iter->it->data;
-		ret = cb(adapter, device, pin_buf, display);
+		ret = cb(adapter, device, pin_buf, display, iter->attempt);
 		iter->attempt++;
 		if (ret > 0)
 			return ret;
diff --git a/src/adapter.h b/src/adapter.h
index 425a11f..09d80c2 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -132,7 +132,8 @@ int btd_cancel_authorization(guint id);
 int btd_adapter_restore_powered(struct btd_adapter *adapter);
 
 typedef ssize_t (*btd_adapter_pin_cb_t) (struct btd_adapter *adapter,
-			struct btd_device *dev, char *out, gboolean *display);
+			struct btd_device *dev, char *out, gboolean *display,
+							unsigned int attempt);
 void btd_adapter_register_pin_cb(struct btd_adapter *adapter,
 						btd_adapter_pin_cb_t cb);
 void btd_adapter_unregister_pin_cb(struct btd_adapter *adapter,