libctf: pass the thunk down properly when wrapping qsort_r

When wrapping qsort_r on a system like FreeBSD on which the compar
argument comes first, we wrap the passed arg in a thunk so we can pass
down both the caller-supplied comparator function and its argument.  We
should pass the *argument* down to the comparator, not the thunk, which
is basically random nonsense on the stack from the point of view of the
caller of qsort_r.

libctf/
	ctf-decls.h (ctf_qsort_compar_thunk): Fix arg passing.
This commit is contained in:
Nick Alcock
2020-06-30 18:02:28 +01:00
parent e28591b3df
commit 67d4cc671b
2 changed files with 5 additions and 1 deletions

View File

@@ -46,7 +46,7 @@ ctf_qsort_compar_thunk (void *arg, const void *a, const void *b)
{
struct ctf_qsort_arg *qsort_arg = (struct ctf_qsort_arg *) arg;
return qsort_arg->compar (a, b, arg);
return qsort_arg->compar (a, b, qsort_arg->arg);
}
static inline void