From 982dbebfa6703c2ea5c3dd65dfaf46657fac8aa8 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Tue, 19 Aug 2025 15:31:17 +0000 Subject: Add qsortr, env_dump4 Signed-off-by: Laurent Bercot --- src/libposixplz/qsortr.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/libposixplz/qsortr.c (limited to 'src/libposixplz') diff --git a/src/libposixplz/qsortr.c b/src/libposixplz/qsortr.c new file mode 100644 index 0000000..5fa7dd1 --- /dev/null +++ b/src/libposixplz/qsortr.c @@ -0,0 +1,48 @@ +/* ISC license. */ + +#include + +#include + +#ifdef SKALIBS_HASQSORTR_POSIX + +void qsortr (void *base, size_t n, size_t width, cmp_func_ref f, void *data) +{ + qsort_r(base, n, width, f, data) ; +} + +#else +#ifdef SKALIBS_HASQSORTR_FREEBSD + +void qsortr (void *base, size_t n, size_t width, cmp_func_ref f, void *data) +{ + qsort_r(base, n, width, data, f) ; +} + +#else + +#include +#include + +struct aux_s +{ + cmp_func_ref f ; + void *data ; +} ; + +static struct aux_s *qsortr_aux_here ; + +static int cmp (void const *a, void const *b) +{ + return (*qsortr_aux_here->f)(a, b, qsortr_aux_here->data) ; +} + +void qsortr (void *base, size_t n, size_t width, cmp_func_ref f, void *data) +{ + struct aux_s aux = { .f = f, .data = data } ; + qsortr_aux_here = &aux ; + qsort(base, n, width, &cmp) ; +} + +#endif +#endif -- cgit v1.3.1