Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/elfmz/far2l.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelfmz <fenix1905@tut.by>2022-04-04 00:38:12 +0300
committerelfmz <fenix1905@tut.by>2022-04-04 00:38:12 +0300
commita4b9ce9ae1f916ff501a553293983dc57540a47b (patch)
tree503dfc3ac8f9e20b10b9e9e92ebd581c0b1f9f38 /far2l/src/base
parentfd08f3d0bb26748f605d282dc65907d5aa3a583e (diff)
impl far_qsortex using qsort for musl (touch #1285)
Diffstat (limited to 'far2l/src/base')
-rw-r--r--far2l/src/base/farrtl.cpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/far2l/src/base/farrtl.cpp b/far2l/src/base/farrtl.cpp
index 29a4845c..4a329117 100644
--- a/far2l/src/base/farrtl.cpp
+++ b/far2l/src/base/farrtl.cpp
@@ -31,7 +31,29 @@ wchar_t * __cdecl far_wcsncpy(wchar_t * dest,const wchar_t * src,size_t DestSize
return tmpsrc;
}
-#if defined(__APPLE__) || defined(__FreeBSD__)
+#if defined(__MUSL__)
+struct QSortExAdapterArg
+{
+ int (*__cdecl comp)(const void *, const void *, void *);
+ void *ctx;
+};
+
+thread_local QSortExAdapterArg *g_qse_aa;
+
+static int QSortExAdapter(const void *left, const void *right)
+{
+ return g_qse_aa->comp(left, right, g_qse_aa->ctx);
+}
+
+void __cdecl far_qsortex(void *base, size_t num, size_t width,
+ int (*__cdecl comp)(const void *, const void *, void *), void *ctx)
+{
+ struct QSortExAdapterArg aa = { comp, ctx };
+ g_qse_aa = &aa;
+ qsort(base, num, width, QSortExAdapter);
+}
+
+#elif defined(__APPLE__) || defined(__FreeBSD__)
struct QSortExAdapterArg
{
int (*__cdecl comp)(const void *, const void *, void *);