p2p: Check for an already existing p2p driver from near_p2p_register
authorOlivier Guiter <olivier.guiter@linux.intel.com>
Mon, 10 Jun 2013 15:44:06 +0000 (17:44 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Fri, 14 Jun 2013 15:38:40 +0000 (17:38 +0200)
If there already is a driver handling this service name, -EALREADY is
returned.

plugins/p2p.c

index 26f1e62..bcabe2c 100644 (file)
@@ -606,10 +606,20 @@ static struct near_device_driver p2p_driver = {
 
 int near_p2p_register(struct near_p2p_driver *driver)
 {
+       struct near_p2p_driver *tmp_driver;
+       GSList *list = NULL;
+
        DBG("driver %p name %s", driver, driver->name);
 
-       driver_list = g_slist_prepend(driver_list, driver);
+       for (list = driver_list; list; list = list->next) {
+               tmp_driver = list->data;
+               if (g_strcmp0(tmp_driver->name, driver->name) == 0) {
+                       near_error("%s already registered", driver->name);
+                       return -EALREADY;
+               }
+       }
 
+       driver_list = g_slist_prepend(driver_list, driver);
        return 0;
 }