From: Stephen Dolan Date: Mon, 18 Jan 2016 10:56:54 +0000 (+0000) Subject: Make jv_sort stable regardless of qsort details. X-Git-Tag: jq-1.6rc1~107 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7835a724d65708f4511e5d26c5ae9a1a5c1da576;p=jq Make jv_sort stable regardless of qsort details. --- diff --git a/src/jv_aux.c b/src/jv_aux.c index 1750013..db2e0ef 100644 --- a/src/jv_aux.c +++ b/src/jv_aux.c @@ -571,14 +571,15 @@ int jv_cmp(jv a, jv b) { struct sort_entry { jv object; jv key; + int index; }; static int sort_cmp(const void* pa, const void* pb) { const struct sort_entry* a = pa; const struct sort_entry* b = pb; int r = jv_cmp(jv_copy(a->key), jv_copy(b->key)); - // comparing by address if r == 0 makes the sort stable - return r ? r : (int)(a - b); + // comparing by index if r == 0 makes the sort stable + return r ? r : (a->index - b->index); } static struct sort_entry* sort_items(jv objects, jv keys) { @@ -590,6 +591,7 @@ static struct sort_entry* sort_items(jv objects, jv keys) { for (int i=0; i