linux-qubasis
linux oasis port as a qubes template
git clone https://9o.is/git/linux-qubasis.git
0001-libsupport-remove-unused-sort_r-definition.patch
(4536B)
1 From 24a0e8d916019160c1fe186ccfb9843d00a5ddde Mon Sep 17 00:00:00 2001
2 From: Michael Forney <mforney@mforney.org>
3 Date: Tue, 2 Mar 2021 15:47:20 -0800
4 Subject: [PATCH] libsupport: remove unused sort_r definition
5
6 e2fsprogs uses sort_r_simple directly, so sort_r is not needed.
7
8 On any linux (including linux-musl), sort_r is defined in terms of
9 qsort_r, so a compiler that does not support inlining may still
10 emit a reference to qsort_r.
11 ---
12 lib/support/sort_r.h | 119 +------------------------------------------
13 1 file changed, 2 insertions(+), 117 deletions(-)
14
15 diff --git a/lib/support/sort_r.h b/lib/support/sort_r.h
16 index 3292a26a..08f496d4 100644
17 --- a/lib/support/sort_r.h
18 +++ b/lib/support/sort_r.h
19 @@ -22,20 +22,10 @@ void sort_r(void *base, size_t nel, size_t width,
20
21 */
22
23 -#define _SORT_R_INLINE inline
24 -
25 -#if (defined __gnu_hurd__ || defined __GNU__ || \
26 - defined __linux__ || defined __MINGW32__ || defined __GLIBC__)
27 -# define _SORT_R_LINUX
28 -#elif (defined __APPLE__ || defined __MACH__ || defined __DARWIN__ || \
29 - defined __FreeBSD__ || defined __DragonFly__)
30 -# define _SORT_R_BSD
31 -#elif (defined _WIN32 || defined _WIN64 || defined __WINDOWS__)
32 -# define _SORT_R_WINDOWS
33 -# undef _SORT_R_INLINE
34 +#if (defined _WIN32 || defined _WIN64 || defined __WINDOWS__)
35 # define _SORT_R_INLINE __inline
36 #else
37 - /* Using our own recursive quicksort sort_r_simple() */
38 +# define _SORT_R_INLINE inline
39 #endif
40
41 #if (defined NESTED_QSORT && NESTED_QSORT == 0)
42 @@ -211,111 +201,6 @@ static _SORT_R_INLINE void sort_r_simple(void *base, size_t nel, size_t w,
43 }
44 }
45
46 -
47 -#if defined NESTED_QSORT
48 -
49 - static _SORT_R_INLINE void sort_r(void *base, size_t nel, size_t width,
50 - int (*compar)(const void *_a,
51 - const void *_b,
52 - void *aarg),
53 - void *arg)
54 - {
55 - int nested_cmp(const void *a, const void *b)
56 - {
57 - return compar(a, b, arg);
58 - }
59 -
60 - qsort(base, nel, width, nested_cmp);
61 - }
62 -
63 -#else /* !NESTED_QSORT */
64 -
65 - /* Declare structs and functions */
66 -
67 - #if defined _SORT_R_BSD
68 -
69 - /* Ensure qsort_r is defined */
70 - extern void qsort_r(void *base, size_t nel, size_t width, void *thunk,
71 - int (*compar)(void *_thunk,
72 - const void *_a, const void *_b));
73 -
74 - #endif
75 -
76 - #if defined _SORT_R_BSD || defined _SORT_R_WINDOWS
77 -
78 - /* BSD (qsort_r), Windows (qsort_s) require argument swap */
79 -
80 - struct sort_r_data
81 - {
82 - void *arg;
83 - int (*compar)(const void *_a, const void *_b, void *_arg);
84 - };
85 -
86 - static _SORT_R_INLINE int sort_r_arg_swap(void *s,
87 - const void *a, const void *b)
88 - {
89 - struct sort_r_data *ss = (struct sort_r_data*)s;
90 - return (ss->compar)(a, b, ss->arg);
91 - }
92 -
93 - #endif
94 -
95 - #if defined _SORT_R_LINUX
96 -
97 - typedef int(* __compar_d_fn_t)(const void *, const void *, void *);
98 - extern void qsort_r(void *base, size_t nel, size_t width,
99 - __compar_d_fn_t __compar, void *arg)
100 - __attribute__((nonnull (1, 4)));
101 -
102 - #endif
103 -
104 - /* implementation */
105 -
106 - static _SORT_R_INLINE void sort_r(void *base, size_t nel, size_t width,
107 - int (*compar)(const void *_a,
108 - const void *_b, void *_arg),
109 - void *arg)
110 - {
111 - #if defined _SORT_R_LINUX
112 -
113 - #if defined __GLIBC__ && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 8))
114 -
115 - /* no qsort_r in glibc before 2.8, need to use nested qsort */
116 - sort_r_simple(base, nel, width, compar, arg);
117 -
118 - #else
119 -
120 - qsort_r(base, nel, width, compar, arg);
121 -
122 - #endif
123 -
124 - #elif defined _SORT_R_BSD
125 -
126 - struct sort_r_data tmp;
127 - tmp.arg = arg;
128 - tmp.compar = compar;
129 - qsort_r(base, nel, width, &tmp, sort_r_arg_swap);
130 -
131 - #elif defined _SORT_R_WINDOWS
132 -
133 - struct sort_r_data tmp;
134 - tmp.arg = arg;
135 - tmp.compar = compar;
136 - qsort_s(base, nel, width, sort_r_arg_swap, &tmp);
137 -
138 - #else
139 -
140 - /* Fall back to our own quicksort implementation */
141 - sort_r_simple(base, nel, width, compar, arg);
142 -
143 - #endif
144 - }
145 -
146 -#endif /* !NESTED_QSORT */
147 -
148 #undef _SORT_R_INLINE
149 -#undef _SORT_R_WINDOWS
150 -#undef _SORT_R_LINUX
151 -#undef _SORT_R_BSD
152
153 #endif /* SORT_R_H_ */
154 --
155 2.32.0
156