diff options
-rw-r--r-- | src/connman.h | 15 | ||||
-rw-r--r-- | src/service.c | 25 | ||||
-rw-r--r-- | src/session.c | 24 |
3 files changed, 28 insertions, 36 deletions
diff --git a/src/connman.h b/src/connman.h index f4de8877..75f136fb 100644 --- a/src/connman.h +++ b/src/connman.h @@ -710,19 +710,12 @@ void __connman_service_counter_unregister(const char *counter); #include <connman/session.h> -struct service_entry; -typedef connman_bool_t (* service_match_cb) (struct connman_session *session, - struct connman_service *service); -typedef struct service_entry* (* create_service_entry_cb) ( - struct connman_session *session, - struct connman_service *service, +typedef void (* service_iterate_cb) (struct connman_service *service, const char *name, - enum connman_service_state state); + enum connman_service_state state, + void *user_data); -GSequence *__connman_service_get_list(struct connman_session *session, - service_match_cb service_match, - create_service_entry_cb create_service_entry, - GDestroyNotify destroy_service_entry); +int __connman_service_iterate_services(service_iterate_cb cb, void *user_data); void __connman_service_session_inc(struct connman_service *service); connman_bool_t __connman_service_session_dec(struct connman_service *service); diff --git a/src/service.c b/src/service.c index 5649788b..df5a10d2 100644 --- a/src/service.c +++ b/src/service.c @@ -2125,38 +2125,21 @@ void __connman_service_counter_unregister(const char *counter) counter_list = g_slist_remove(counter_list, counter); } -GSequence *__connman_service_get_list(struct connman_session *session, - service_match_cb service_match, - create_service_entry_cb create_service_entry, - GDestroyNotify destroy_service_entry) +int __connman_service_iterate_services(service_iterate_cb cb, void *user_data) { - GSequence *list; GSequenceIter *iter; - struct connman_service *service; - struct service_entry *entry; - - list = g_sequence_new(destroy_service_entry); - if (list == NULL) - return NULL; iter = g_sequence_get_begin_iter(service_list); while (g_sequence_iter_is_end(iter) == FALSE) { - service = g_sequence_get(iter); - - if (service_match(session, service) == TRUE) { - entry = create_service_entry(session, service, - service->name, service->state); - if (entry == NULL) - return list; + struct connman_service *service = g_sequence_get(iter); - g_sequence_append(list, entry); - } + cb(service, service->name, service->state, user_data); iter = g_sequence_iter_next(iter); } - return list; + return 0; } void __connman_service_session_inc(struct connman_service *service) diff --git a/src/session.c b/src/session.c index bdb22d0c..98b22db3 100644 --- a/src/session.c +++ b/src/session.c @@ -1245,6 +1245,24 @@ static struct service_entry *create_service_entry(struct connman_session * sessi return entry; } +static void iterate_service_cb(struct connman_service *service, + const char *name, + enum connman_service_state state, + void *user_data) +{ + struct connman_session *session = user_data; + struct service_entry *entry; + + if (service_match(session, service) == FALSE) + return; + + entry = create_service_entry(session, service, name, state); + if (entry == NULL) + return; + + g_sequence_append(session->service_list, entry); +} + static void destroy_service_entry(gpointer data) { struct service_entry *entry = data; @@ -1270,10 +1288,8 @@ static void populate_service_list(struct connman_session *session) session->service_hash = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, NULL); - session->service_list = __connman_service_get_list(session, - service_match, - create_service_entry, - destroy_service_entry); + session->service_list = g_sequence_new(destroy_service_entry); + __connman_service_iterate_services(iterate_service_cb, session); g_sequence_sort(session->service_list, sort_services, session); |