Inspired by basename/dirname compat routines.
```
$ cc -std=c11 -Wall -Wextra -g -O2 test.c
$ nm test.o | grep qsort
U __linux_qsort_r
U qsort_r
$ ./a.out
BSD qsort_r: 1 2 3 4 5
Linux qsort_r: 1 2 3 4 5
```
```
#include <sys/param.h>
#include <stdio.h>
#include <stdlib.h>
int
bsdcmp(void *thunk __unused, const void *a, const void *b)
{
int ia = *(const int *)a;
int ib = *(const int *)b;
if (ia < ib)
return (-1);
else if (ia > ib)
return (1);
return (0);
}
int
linuxcmp(const void *a, const void *b, void *thunk __unused)
{
int ia = *(const int *)a;
int ib = *(const int *)b;
if (ia < ib)
return (-1);
else if (ia > ib)
return (1);
return (0);
}
int
main(int argc, char **argv)
{
int a[] = {3,5,1,2,4};
int b[] = {3,5,1,2,4};
size_t i;
qsort_r(a, nitems(a), sizeof(a[0]), NULL, bsdcmp);
qsort_r(b, nitems(b), sizeof(b[0]), linuxcmp, NULL);
printf("BSD qsort_r: ");
for (i = 0; i < nitems(a); i++)
printf(" %d", a[i]);
printf("\n");
printf("Linux qsort_r:");
for (i = 0; i < nitems(b); i++)
printf(" %d", b[i]);
printf("\n");
return (0);
}
```