Diff between ff2c43131c1fb3312aa8d3e3cb9d77fd56b26334 and 9aa191e35f1611f64031d34e1c2ad17d6fd252b6

Changed Files

File Additions Deletions Status
obexd/src/service.c +7 -3 modified

Full Patch

diff --git a/obexd/src/service.c b/obexd/src/service.c
index 196a5c1..c6ce101 100644
--- a/obexd/src/service.c
+++ b/obexd/src/service.c
@@ -49,8 +49,8 @@ struct obex_service_driver *obex_service_driver_find(GSList *list,
 		struct obex_service_driver *driver = l->data;
 
 		if (driver->who && who &&
-				driver->who_size == who_size &&
-				memcmp(driver->who, who, who_size) != 0)
+				(driver->who_size != who_size ||
+				memcmp(driver->who, who, who_size) != 0))
 			continue;
 
 		if (driver->target == NULL && target == NULL)
@@ -97,7 +97,11 @@ int obex_service_driver_register(struct obex_service_driver *driver)
 
 	debug("driver %p service %s registered", driver, driver->name);
 
-	drivers = g_slist_append(drivers, driver);
+	/* Drivers that support who has priority */
+	if (driver->who)
+		drivers = g_slist_prepend(drivers, driver);
+	else
+		drivers = g_slist_append(drivers, driver);
 
 	return 0;
 }