diff --git a/src/modules/connman/E_Connman.h b/src/modules/connman/E_Connman.h index b976fa408..02f56898d 100644 --- a/src/modules/connman/E_Connman.h +++ b/src/modules/connman/E_Connman.h @@ -73,6 +73,13 @@ extern int E_CONNMAN_EVENT_MANAGER_OUT; unsigned int e_connman_system_init(E_DBus_Connection *edbus_conn) EINA_ARG_NONNULL(1); unsigned int e_connman_system_shutdown(void); +/* Requests from UI */ + +/** + * Find service using a non-stringshared path + */ +struct Connman_Service *econnman_manager_find_service(struct Connman_Manager *cm, const char *path) EINA_ARG_NONNULL(1, 2); + /* UI calls from econnman */ /* diff --git a/src/modules/connman/e_connman.c b/src/modules/connman/e_connman.c index 639237ccf..c425466a3 100644 --- a/src/modules/connman/e_connman.c +++ b/src/modules/connman/e_connman.c @@ -287,12 +287,11 @@ static struct Connman_Service *_service_new(const char *path, DBusMessageIter *p return cs; } -static struct Connman_Service *_manager_find_service_by_path(struct Connman_Manager *cm, - const char *path) +static struct Connman_Service *_manager_find_service_stringshared( + struct Connman_Manager *cm, const char *path) { struct Connman_Service *cs, *found = NULL; - path = eina_stringshare_add(path); EINA_INLIST_FOREACH(cm->services, cs) { if (cs->obj.path == path) @@ -300,12 +299,21 @@ static struct Connman_Service *_manager_find_service_by_path(struct Connman_Mana found = cs; break; } - } - - eina_stringshare_del(path); + } return found; } +struct Connman_Service *econnman_manager_find_service(struct Connman_Manager *cm, + const char *path) +{ + struct Connman_Service *cs; + + path = eina_stringshare_add(path); + cs = _manager_find_service_stringshared(cm, path); + eina_stringshare_del(path); + return cs; +} + static void _manager_services_remove(struct Connman_Manager *cm, DBusMessageIter *array) { @@ -322,7 +330,7 @@ static void _manager_services_remove(struct Connman_Manager *cm, continue; } dbus_message_iter_get_basic(array, &path); - cs = _manager_find_service_by_path(cm, path); + cs = econnman_manager_find_service(cm, path); if (cs == NULL) { ERR("Received object path '%s' to remove, but it's not in list", @@ -379,7 +387,7 @@ static void _manager_services_changed(void *data, DBusMessage *msg) } dbus_message_iter_get_basic(&entry, &path); - cs = _manager_find_service_by_path(cm, path); + cs = econnman_manager_find_service(cm, path); dbus_message_iter_next(&entry); if (dbus_message_iter_get_arg_type(&entry) != DBUS_TYPE_ARRAY)