1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
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
|