- sortparms = parms;
- qsort(l->flatlist, l->num_records,
- sizeof(struct record_cluster*), reclist_cmp);
+ struct reclist_bucket **flatlist = xmalloc(sizeof(*flatlist) * l->num_records);
+ struct reclist_bucket *ptr = l->sorted_list;
+ struct reclist_bucket **prev = &l->sorted_list;
+ int i = 0;
+ while (ptr)
+ {
+ flatlist[i] = ptr;
+ ptr = ptr->snext;
+ i++;
+ }
+ assert(i == l->num_records);
+
+ qsort_sortparms = parms;
+ qsort(flatlist, l->num_records, sizeof(*flatlist), reclist_cmp);
+ for (i = 0; i < l->num_records; i++)
+ {
+ *prev = flatlist[i];
+ prev = &flatlist[i]->snext;
+ }
+ *prev = 0;
+ l->last = prev;
+
+ xfree(flatlist);
+