static gint compare_group(gconstpointer a, gconstpointer b, gpointer user_data)
{
+ struct connman_group *group_a = (void *) a;
+ struct connman_group *group_b = (void *) b;
+
+ if (group_a->favorite == TRUE && group_b->favorite == FALSE)
+ return -1;
+
+ if (group_a->favorite == FALSE && group_b->favorite == TRUE)
+ return 1;
+
+ return (gint) group_b->strength - (gint) group_a->strength;
+}
+
+static gint search_group(gconstpointer a, gconstpointer b, gpointer user_data)
+{
struct connman_group *group = (void *) a;
return g_strcmp0(group->id, user_data);
if (name == NULL)
return NULL;
- iter = g_sequence_search(groups, NULL, compare_group, (char *) name);
+ iter = g_sequence_search(groups, NULL, search_group, (char *) name);
if (g_sequence_iter_is_begin(iter) == FALSE &&
g_sequence_iter_is_end(iter) == FALSE) {
group = g_sequence_get(iter);
group->state = CONNMAN_SERVICE_STATE_IDLE;
- group->iter = g_sequence_append(groups, group);
+ group->iter = g_sequence_insert_sorted(groups, group,
+ compare_group, NULL);
g_dbus_register_interface(connection, group->path,
CONNMAN_SERVICE_INTERFACE,
group->type = g_strdup(__connman_device_get_type(device));
+ g_sequence_sort_changed(group->iter, compare_group, NULL);
+
return 0;
}
if (group == NULL)
return -EINVAL;
+ g_free(group->type);
+ group->type = NULL;
+
+ g_sequence_sort_changed(group->iter, compare_group, NULL);
+
return 0;
}
"WiFi.Security"));
}
+ g_sequence_sort_changed(group->iter, compare_group, NULL);
+
return 0;
}
group->network = NULL;
}
+ g_free(group->type);
+ group->type = NULL;
+
+ g_sequence_sort_changed(group->iter, compare_group, NULL);
+
return 0;
}