From: Max Kellermann Date: Fri, 19 Sep 2008 15:31:17 +0000 (+0200) Subject: filelist: fix segfault during filelist_sort() X-Git-Tag: v0.12_alpha1~215 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=45b554123c08f36de1daf133164f76154045c387;p=ncmpc.git 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. --- 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 *