By the way, the different branches are because the BSD version of `qsort_r` passes the payload parameter in a different position than the GNU version of `qsort_r` and Windows is like BSD but calls it `qsort_s` and requires CDECL for the function pointer. Software is terrible.