summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2023-01-30 19:04:31 +0000
committerTheodore Ts'o <tytso@mit.edu>2023-02-01 00:18:27 -0500
commit3d2214e50ce1a69f718427e1c125eb476af54611 (patch)
tree591afdf19ec948ce4df6eb16bb4be1712774ba95
parent6605a07f6afe3d9d667ff31855bc607c1904d18b (diff)
downloade2fsprogs-3d2214e50ce1a69f718427e1c125eb476af54611.tar.gz
AOSP: lib/support: don't assume qsort_r() is always available on Linux
Since commit 4e5f24ae4267 ("Use an autoconf test to detect for a BSD- or GNU-style qsort_r function"), e2fsck fails to build for Android because lib/support/sort_r.h assumes that qsort_r() is always available on "Linux", but in fact it's not supported by Android's libc. Rename _SORT_R_LINUX to _SORT_R_GNU to clarify that it's really the glibc convention for qsort_r(), not the "Linux" convention per se, and make sort_r.h stop setting it automatically when __linux__ is defined. Note: this change does *not* prevent glibc's qsort_r() from being used when e2fsprogs is built using the autotools-based build system, as 'configure' checks for qsort_r() too. This change just affects the fallback behavior for when qsort_r() was not already detected. Fixes: 4e5f24ae4267 ("Use an autoconf test to detect for a BSD- or GNU-style qsort_r function") Signed-off-by: Eric Biggers <ebiggers@google.com> Link: https://lore.kernel.org/r/20230130215829.863455-1-ebiggers@kernel.org Change-Id: I4ed2fd6aef5a0d62960988d29e35acd337bb7d02 From AOSP commit: 9f289d0add4f12fa2e4b21754141363a2759d152
-rw-r--r--lib/support/sort_r.h12
1 files changed, 6 insertions, 6 deletions
diff --git a/lib/support/sort_r.h b/lib/support/sort_r.h
index ebf78378..8473ca83 100644
--- a/lib/support/sort_r.h
+++ b/lib/support/sort_r.h
@@ -25,12 +25,12 @@ void sort_r(void *base, size_t nel, size_t width,
#define _SORT_R_INLINE inline
#if (defined HAVE_GNU_QSORT_R)
-# define _SORT_R_LINUX
+# define _SORT_R_GNU
#elif (defined HAVE_BSD_QSORT_R)
# define _SORT_R_BSD
#elif (defined __gnu_hurd__ || defined __GNU__ || \
- defined __linux__ || defined __MINGW32__ || defined __GLIBC__)
-# define _SORT_R_LINUX
+ defined __MINGW32__ || defined __GLIBC__)
+# define _SORT_R_GNU
#elif (defined __APPLE__ || defined __MACH__ || defined __DARWIN__ || \
defined __FreeBSD__ || defined __DragonFly__)
# define _SORT_R_BSD
@@ -264,7 +264,7 @@ static _SORT_R_INLINE void sort_r_simple(void *base, size_t nel, size_t w,
#endif
- #if defined _SORT_R_LINUX
+ #if defined _SORT_R_GNU
typedef int(* __compar_d_fn_t)(const void *, const void *, void *);
extern void qsort_r(void *base, size_t nel, size_t width,
@@ -280,7 +280,7 @@ static _SORT_R_INLINE void sort_r_simple(void *base, size_t nel, size_t w,
const void *_b, void *_arg),
void *arg)
{
- #if defined _SORT_R_LINUX
+ #if defined _SORT_R_GNU
#if defined __GLIBC__ && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 8))
@@ -319,7 +319,7 @@ static _SORT_R_INLINE void sort_r_simple(void *base, size_t nel, size_t w,
#undef _SORT_R_INLINE
#undef _SORT_R_WINDOWS
-#undef _SORT_R_LINUX
+#undef _SORT_R_GNU
#undef _SORT_R_BSD
#endif /* SORT_R_H_ */