From 24a0e8d916019160c1fe186ccfb9843d00a5ddde Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Tue, 2 Mar 2021 15:47:20 -0800 Subject: [PATCH] libsupport: remove unused sort_r definition e2fsprogs uses sort_r_simple directly, so sort_r is not needed. On any linux (including linux-musl), sort_r is defined in terms of qsort_r, so a compiler that does not support inlining may still emit a reference to qsort_r. --- lib/support/sort_r.h | 119 +------------------------------------------ 1 file changed, 2 insertions(+), 117 deletions(-) diff --git a/lib/support/sort_r.h b/lib/support/sort_r.h index 3292a26a..08f496d4 100644 --- a/lib/support/sort_r.h +++ b/lib/support/sort_r.h @@ -22,20 +22,10 @@ void sort_r(void *base, size_t nel, size_t width, */ -#define _SORT_R_INLINE inline - -#if (defined __gnu_hurd__ || defined __GNU__ || \ - defined __linux__ || defined __MINGW32__ || defined __GLIBC__) -# define _SORT_R_LINUX -#elif (defined __APPLE__ || defined __MACH__ || defined __DARWIN__ || \ - defined __FreeBSD__ || defined __DragonFly__) -# define _SORT_R_BSD -#elif (defined _WIN32 || defined _WIN64 || defined __WINDOWS__) -# define _SORT_R_WINDOWS -# undef _SORT_R_INLINE +#if (defined _WIN32 || defined _WIN64 || defined __WINDOWS__) # define _SORT_R_INLINE __inline #else - /* Using our own recursive quicksort sort_r_simple() */ +# define _SORT_R_INLINE inline #endif #if (defined NESTED_QSORT && NESTED_QSORT == 0) @@ -211,111 +201,6 @@ static _SORT_R_INLINE void sort_r_simple(void *base, size_t nel, size_t w, } } - -#if defined NESTED_QSORT - - static _SORT_R_INLINE void sort_r(void *base, size_t nel, size_t width, - int (*compar)(const void *_a, - const void *_b, - void *aarg), - void *arg) - { - int nested_cmp(const void *a, const void *b) - { - return compar(a, b, arg); - } - - qsort(base, nel, width, nested_cmp); - } - -#else /* !NESTED_QSORT */ - - /* Declare structs and functions */ - - #if defined _SORT_R_BSD - - /* Ensure qsort_r is defined */ - extern void qsort_r(void *base, size_t nel, size_t width, void *thunk, - int (*compar)(void *_thunk, - const void *_a, const void *_b)); - - #endif - - #if defined _SORT_R_BSD || defined _SORT_R_WINDOWS - - /* BSD (qsort_r), Windows (qsort_s) require argument swap */ - - struct sort_r_data - { - void *arg; - int (*compar)(const void *_a, const void *_b, void *_arg); - }; - - static _SORT_R_INLINE int sort_r_arg_swap(void *s, - const void *a, const void *b) - { - struct sort_r_data *ss = (struct sort_r_data*)s; - return (ss->compar)(a, b, ss->arg); - } - - #endif - - #if defined _SORT_R_LINUX - - typedef int(* __compar_d_fn_t)(const void *, const void *, void *); - extern void qsort_r(void *base, size_t nel, size_t width, - __compar_d_fn_t __compar, void *arg) - __attribute__((nonnull (1, 4))); - - #endif - - /* implementation */ - - static _SORT_R_INLINE void sort_r(void *base, size_t nel, size_t width, - int (*compar)(const void *_a, - const void *_b, void *_arg), - void *arg) - { - #if defined _SORT_R_LINUX - - #if defined __GLIBC__ && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 8)) - - /* no qsort_r in glibc before 2.8, need to use nested qsort */ - sort_r_simple(base, nel, width, compar, arg); - - #else - - qsort_r(base, nel, width, compar, arg); - - #endif - - #elif defined _SORT_R_BSD - - struct sort_r_data tmp; - tmp.arg = arg; - tmp.compar = compar; - qsort_r(base, nel, width, &tmp, sort_r_arg_swap); - - #elif defined _SORT_R_WINDOWS - - struct sort_r_data tmp; - tmp.arg = arg; - tmp.compar = compar; - qsort_s(base, nel, width, sort_r_arg_swap, &tmp); - - #else - - /* Fall back to our own quicksort implementation */ - sort_r_simple(base, nel, width, compar, arg); - - #endif - } - -#endif /* !NESTED_QSORT */ - #undef _SORT_R_INLINE -#undef _SORT_R_WINDOWS -#undef _SORT_R_LINUX -#undef _SORT_R_BSD #endif /* SORT_R_H_ */ -- 2.32.0