summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorJeff Brown <jeffbrown@google.com>2012-03-19 11:48:12 -0700
committerJeff Brown <jeffbrown@google.com>2012-03-19 11:50:02 -0700
commit46fc395386f2277a0425b2c46be08fd91f6554f4 (patch)
treefd748e51bea1b40e081d66332034f0a8fc3b5a60 /tools
parent5db7bc6eea9c9c7c84ae21a7cc0069ceee08a6d4 (diff)
downloadframeworks_base-46fc395386f2277a0425b2c46be08fd91f6554f4.zip
frameworks_base-46fc395386f2277a0425b2c46be08fd91f6554f4.tar.gz
frameworks_base-46fc395386f2277a0425b2c46be08fd91f6554f4.tar.bz2
Fix build break on glibc hosts.
Change-Id: Ida70bec6ea972d042982428353cbbc33cde25136
Diffstat (limited to 'tools')
-rw-r--r--tools/aapt/StringPool.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/tools/aapt/StringPool.cpp b/tools/aapt/StringPool.cpp
index b6295bd..a9941b4 100644
--- a/tools/aapt/StringPool.cpp
+++ b/tools/aapt/StringPool.cpp
@@ -213,7 +213,11 @@ status_t StringPool::addStyleSpan(size_t idx, const entry_style_span& span)
return NO_ERROR;
}
+#ifdef __GLIBC__
+int StringPool::config_sort(const void* lhs, const void* rhs, void* state)
+#else
int StringPool::config_sort(void* state, const void* lhs, const void* rhs)
+#endif
{
StringPool* pool = (StringPool*)state;
const entry& lhe = pool->mEntries[pool->mEntryArray[*static_cast<const size_t*>(lhs)]];
@@ -241,7 +245,13 @@ void StringPool::sortByConfig()
NOISY(printf("SORTING STRINGS BY CONFIGURATION...\n"));
// Vector::sort uses insertion sort, which is very slow for this data set.
// Use quicksort instead because we don't need a stable sort here.
+ // For more fun, GLibC took qsort_r from BSD but then decided to swap the
+ // order the last two parameters.
+#ifdef __GLIBC__
+ qsort_r(newPosToOriginalPos.editArray(), N, sizeof(size_t), config_sort, this);
+#else
qsort_r(newPosToOriginalPos.editArray(), N, sizeof(size_t), this, config_sort);
+#endif
//newPosToOriginalPos.sort(config_sort, this);
NOISY(printf("DONE SORTING STRINGS BY CONFIGURATION.\n"));