aboutsummaryrefslogtreecommitdiffstats
path: root/src/libposixplz
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-08-19 15:31:17 +0000
committerLaurent Bercot <ska@appnovation.com>2025-08-19 15:31:17 +0000
commit982dbebfa6703c2ea5c3dd65dfaf46657fac8aa8 (patch)
treef5e14205c9de088e850580f689a55983c80c01ef /src/libposixplz
parent4e30b6899578bae9343bacf8840a80bf1ada0f2a (diff)
downloadskalibs-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.c48
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