From 45b554123c08f36de1daf133164f76154045c387 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 19 Sep 2008 17:31:17 +0200 Subject: [PATCH] filelist: fix segfault during filelist_sort() When I converted the filelist from GList to GPtrArray, I missed that the GCompareFunc does not actually get the pointers from g_ptr_array_sort(), but pointers to the pointers... run g_ptr_array_sort_with_data() instead with a wrapper function. --- src/filelist.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/filelist.c b/src/filelist.c index 6e4ebed..59fed47 100644 --- a/src/filelist.c +++ b/src/filelist.c @@ -101,10 +101,22 @@ filelist_move(struct filelist *filelist, struct filelist *from) g_ptr_array_set_size(from->entries, 0); } +static gint +filelist_compare_indirect(gconstpointer ap, gconstpointer bp, gpointer data) +{ + GCompareFunc compare_func = data; + gconstpointer a = *(const gconstpointer*)ap; + gconstpointer b = *(const gconstpointer*)bp; + + return compare_func(a, b); +} + void filelist_sort(struct filelist *filelist, GCompareFunc compare_func) { - g_ptr_array_sort(filelist->entries, compare_func); + g_ptr_array_sort_with_data(filelist->entries, + filelist_compare_indirect, + compare_func); } struct filelist_entry * -- 2.30.2