0001-libsupport-remove-unused-sort_r-definition.patch (4536B)
- From 24a0e8d916019160c1fe186ccfb9843d00a5ddde Mon Sep 17 00:00:00 2001
- From: Michael Forney <mforney@mforney.org>
- 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