diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-08-19 15:31:17 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska@appnovation.com> | 2025-08-19 15:31:17 +0000 |
| commit | 982dbebfa6703c2ea5c3dd65dfaf46657fac8aa8 (patch) | |
| tree | f5e14205c9de088e850580f689a55983c80c01ef /src/libposixplz | |
| parent | 4e30b6899578bae9343bacf8840a80bf1ada0f2a (diff) | |
| download | skalibs-982dbebfa6703c2ea5c3dd65dfaf46657fac8aa8.tar.gz | |
Add qsortr, env_dump4
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/libposixplz')
| -rw-r--r-- | src/libposixplz/qsortr.c | 48 |
1 files changed, 48 insertions, 0 deletions
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 <skalibs/sysdeps.h> + +#include <stdlib.h> + +#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 <skalibs/functypes.h> +#include <skalibs/posixplz.h> + +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 |
