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:
parent
e28591b3df
commit
67d4cc671b
@ -1,3 +1,7 @@
|
||||
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
|
||||
|
||||
ctf-decls.h (ctf_qsort_compar_thunk): Fix arg passing.
|
||||
|
||||
2020-07-22 Nick Alcock <nick.alcock@oracle.com>
|
||||
|
||||
* ctf-impl.h (ctf_next_hkv_t): New, kv-pairs passed to
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user