diff options
author | elfmz <fenix1905@tut.by> | 2022-04-04 00:38:12 +0300 |
---|---|---|
committer | elfmz <fenix1905@tut.by> | 2022-04-04 00:38:12 +0300 |
commit | a4b9ce9ae1f916ff501a553293983dc57540a47b (patch) | |
tree | 503dfc3ac8f9e20b10b9e9e92ebd581c0b1f9f38 /far2l/src/base | |
parent | fd08f3d0bb26748f605d282dc65907d5aa3a583e (diff) |
impl far_qsortex using qsort for musl (touch #1285)
Diffstat (limited to 'far2l/src/base')
-rw-r--r-- | far2l/src/base/farrtl.cpp | 24 |
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 *); |