- qsort_sortparms = parms;
- qsort(l->flatlist, l->num_records,
- sizeof(struct record_cluster*), reclist_cmp);
- reclist_rewind(l);
+ struct reclist_bucket **flatlist = xmalloc(sizeof(*flatlist) * l->num_records);
+ struct reclist_bucket *ptr;
+ struct reclist_bucket **prev;
+ int i = 0;
+
+ reclist_enter(l);
+
+ ptr = l->sorted_list;
+ prev = &l->sorted_list;
+ while (ptr)
+ {
+ ptr->sort_parms = parms;
+ flatlist[i] = ptr;
+ ptr = ptr->snext;
+ i++;
+ }
+ assert(i == l->num_records);
+
+ 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);
+
+ reclist_leave(l);