'flock': '',
'strtok_r': '',
'getrandom': '',
- 'qsort_r': '',
'qsort_s': '',
}
endif
endforeach
+if cpp.links('''
+ #define _GNU_SOURCE
+ #include <stdlib.h>
+
+ static int dcomp(const void *l, const void *r, void *t) { return 0; }
+
+ int main(int ac, char **av) {
+ int arr[] = { 1 };
+ void *t = NULL;
+ qsort_r((void*)&arr[0], 1, 1, dcomp, t);
+ return (0);
+ }''',
+ args : pre_args,
+ name : 'GNU qsort_r')
+ pre_args += '-DHAVE_GNU_QSORT_R'
+elif cpp.links('''
+ #include <stdlib.h>
+
+ static int dcomp(void *t, const void *l, const void *r) { return 0; }
+
+ int main(int ac, char **av) {
+ int arr[] = { 1 };
+ void *t = NULL;
+ qsort_r((void*)&arr[0], 1, 1, t, dcomp);
+ return (0);
+ }''',
+ args : pre_args,
+ name : 'BSD qsort_r')
+ pre_args += '-DHAVE_BSD_QSORT_R'
+endif
+
if cc.has_header_symbol('time.h', 'struct timespec')
pre_args += '-DHAVE_STRUCT_TIMESPEC'
endif
int (*compar)(const void *, const void *, void *),
void *arg)
{
-#if HAVE_QSORT_R
-# if defined(__GLIBC__)
+#if HAVE_GNU_QSORT_R
/* GNU extension added in glibc 2.8 */
qsort_r(base, nmemb, size, compar, arg);
-# elif (DETECT_OS_APPLE || DETECT_OS_BSD)
+#elif HAVE_BSD_QSORT_R
/* BSD/macOS qsort_r takes "arg" before the comparison function and it
* pass the "arg" before the elements.
*/
arg
};
qsort_r(base, nmemb, size, &data, util_qsort_adapter);
-# endif
#elif HAVE_QSORT_S
# ifdef _WIN32
/* MSVC/MinGW qsort_s takes "arg" after the comparison function and it