Use gnu-libc arg order for BLI_sort_r
authorCampbell Barton <ideasman42@gmail.com>
Tue, 24 Jun 2014 18:01:38 +0000 (04:01 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 24 Jun 2014 18:04:52 +0000 (04:04 +1000)
When building on gnu-libc don't use our own implementation.

source/blender/blenkernel/intern/navmesh_conversion.c
source/blender/blenkernel/intern/particle_system.c
source/blender/blenlib/BLI_sort.h
source/blender/blenlib/intern/sort.c

index 64d59b165e1b7bc7f5e88fc0eaca7739f312f8a2..8ab9cdd41e74980d41b0ef1d1c8bbd33ca6d9ebd 100644 (file)
@@ -305,7 +305,7 @@ struct SortContext {
        const int *trisToFacesMap;
 };
 
-static int compareByData(void *ctx, const void *a, const void *b)
+static int compareByData(const void *a, const void *b, void *ctx)
 {
        return (((struct SortContext *)ctx)->recastData[((struct SortContext *)ctx)->trisToFacesMap[*(int *)a]] -
                ((struct SortContext *)ctx)->recastData[((struct SortContext *)ctx)->trisToFacesMap[*(int *)b]]);
index 665bf2a85a948069cc9eb8faab85ffccd6172d37..1cc89d5f3fad5ae71cefa2a7eafb4ac7fea30ec3 100644 (file)
@@ -1011,7 +1011,7 @@ static void *distribute_threads_exec_cb(void *data)
        return 0;
 }
 
-static int distribute_compare_orig_index(void *user_data, const void *p1, const void *p2)
+static int distribute_compare_orig_index(const void *p1, const void *p2, void *user_data)
 {
        int *orig_index = (int *) user_data;
        int index1 = orig_index[*(const int *)p1];
index 4df17d98a4b42a91eb86802928f4e32471060923..0108ae19872901579cb8602a81f404f5f69958b8 100644 (file)
  *  \ingroup bli
  */
 
+#include <stdlib.h>
+
+#ifdef __GLIBC__
+#  define BLI_qsort_r qsort_r
+#endif
+
 /* Quick sort reentrant */
-typedef int (*BLI_sort_cmp_t)(void *ctx, const void *a, const void *b);
+typedef int (*BLI_sort_cmp_t)(const void *a, const void *b, void *ctx);
 
 void BLI_qsort_r(void *a, size_t n, size_t es, void *thunk, BLI_sort_cmp_t cmp)
 #ifdef __GNUC__
index a1b7296feb6845a5612d4c1e7bc3124169ca9bda..991337446cfcb2f6545b140db122a23e12e7f3c9 100644 (file)
 
 #include <stdlib.h>
 
+#ifndef __GLIBC__
+
 #include "BLI_utildefines.h"
 
 #include "BLI_sort.h"
 
+/* note: modified to use glibc arg order for callback */
 /* **** qsort based on FreeBSD source (libkern\qsort.c) **** */
 BLI_INLINE char        *med3(char *, char *, char *, BLI_sort_cmp_t, void *);
 BLI_INLINE void         swapfunc(char *, char *, int, int);
@@ -72,7 +75,7 @@ BLI_INLINE void swapfunc(char *a, char *b, int n, int swaptype)
                swapfunc(a, b, es, swaptype)
 
 #define vecswap(a, b, n)       if ((n) > 0) swapfunc(a, b, n, swaptype)
-#define        CMP(t, x, y) (cmp((t), (x), (y)))
+#define        CMP(t, x, y) (cmp((x), (y), (t)))
 
 BLI_INLINE char *med3(char *a, char *b, char *c, BLI_sort_cmp_t cmp, void *thunk)
 {
@@ -171,3 +174,5 @@ loop:
                goto loop;
        }
 }
+
+#endif  /* __GLIBC__ */