Make qsort_r usage "portable". Why does a function which seems so simple
have to be so complicated?
git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@105797 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Symbol/Symtab.cpp b/source/Symbol/Symtab.cpp
index f1ed356..9a19973 100644
--- a/source/Symbol/Symtab.cpp
+++ b/source/Symbol/Symtab.cpp
@@ -251,6 +251,10 @@
return 1;
}
+int Symtab::CompareSymbolValueByIndexLinux(const void* a, const void* b, void* thunk) {
+ CompareSymbolValueByIndex(thunk, a, b);
+}
+
void
Symtab::SortSymbolIndexesByValue (std::vector<uint32_t>& indexes, bool remove_duplicates) const
{
@@ -259,7 +263,12 @@
return;
// Sort the indexes in place using qsort
+ // FIXME: (WRONGDEFINE) Need a better define for this!
+#ifdef __APPLE__
::qsort_r (&indexes[0], indexes.size(), sizeof(uint32_t), (void *)&m_symbols[0], Symtab::CompareSymbolValueByIndex);
+#else
+ ::qsort_r (&indexes[0], indexes.size(), sizeof(uint32_t), CompareSymbolValueByIndexLinux, (void *)&m_symbols[0]);
+#endif
// Remove any duplicates if requested
if (remove_duplicates)