};
struct connman_group {
+ GSequenceIter *iter;
+ char *id;
char *path;
char *type;
char *name;
struct connman_network *network;
};
-static GHashTable *groups = NULL;
+static GSequence *groups = NULL;
static DBusConnection *connection = NULL;
g_free(group->name);
g_free(group->type);
g_free(group->path);
+ g_free(group->id);
g_free(group);
}
+static gint compare_group(gconstpointer a, gconstpointer b, gpointer user_data)
+{
+ struct connman_group *group = (void *) a;
+
+ return g_strcmp0(group->id, user_data);
+}
+
static struct connman_group *lookup_group(const char *name)
{
+ GSequenceIter *iter;
struct connman_group *group;
DBG("name %s", name);
if (name == NULL)
return NULL;
- group = g_hash_table_lookup(groups, name);
- if (group != NULL)
- goto done;
+ iter = g_sequence_search(groups, NULL, compare_group, (char *) name);
+ if (g_sequence_iter_is_begin(iter) == FALSE &&
+ g_sequence_iter_is_end(iter) == FALSE) {
+ group = g_sequence_get(iter);
+ if (group != NULL)
+ goto done;
+ }
group = g_try_new0(struct connman_group, 1);
if (group == NULL)
return NULL;
+ group->id = g_strdup(name);
+
group->type = CONNMAN_ELEMENT_TYPE_UNKNOWN;
group->path = g_strdup_printf("%s/%s", PROFILE_DEFAULT, name);
group->state = CONNMAN_SERVICE_STATE_IDLE;
- g_hash_table_insert(groups, g_strdup(name), group);
+ group->iter = g_sequence_append(groups, group);
g_dbus_register_interface(connection, group->path,
CONNMAN_SERVICE_INTERFACE,
dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &path);
}
-static void append_path(gpointer key, gpointer value, gpointer user_data)
+static void append_path(gpointer value, gpointer user_data)
{
struct connman_group *group = value;
DBusMessageIter *iter = user_data;
{
DBG("");
- g_hash_table_foreach(groups, append_path, iter);
+ g_sequence_foreach(groups, append_path, iter);
}
static void append_services(DBusMessageIter *dict)
if (connection == NULL)
return -1;
- groups = g_hash_table_new_full(g_str_hash, g_str_equal,
- g_free, free_group);
+ groups = g_sequence_new(free_group);
g_dbus_register_interface(connection, PROFILE_DEFAULT,
CONNMAN_PROFILE_INTERFACE,
g_dbus_unregister_interface(connection, PROFILE_DEFAULT,
CONNMAN_PROFILE_INTERFACE);
- g_hash_table_destroy(groups);
+ g_sequence_free(groups);
groups = NULL;
if (connection == NULL)