]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
introduce ZSTD_USE_C90_QSORT
authorYann Collet <cyan@fb.com>
Fri, 21 Feb 2025 19:36:30 +0000 (11:36 -0800)
committerYann Collet <cyan@fb.com>
Fri, 21 Feb 2025 19:36:30 +0000 (11:36 -0800)
.github/workflows/dev-short-tests.yml
lib/dictBuilder/cover.c

index 56a46a7443144fc2ab71c96b6d387241d58675c6..56401db0a636bdf5b0ba398b19b5fa1a807a05ee 100644 (file)
@@ -693,7 +693,7 @@ jobs:
           sudo apt install -y musl-tools
       - name: Compile the project with musl-gcc
         run: |
-          CC=musl-gcc make -j V=1 zstd
+          CC=musl-gcc CPPFLAGS=-DZSTD_USE_C90_QSORT make -j V=1 zstd
 
   intel-cet-compatibility:
     runs-on: ubuntu-latest
index 2ef33c73e5d91747cfc5782aadd6d6ddc197a476..29820d7e1ff53b71acc1a44b2630aa1d6ee27634 100644 (file)
@@ -24,9 +24,9 @@
 /* qsort_r is an extension. */
 #if defined(__linux) || defined(__linux__) || defined(linux) || defined(__gnu_linux__) || \
     defined(__CYGWIN__) || defined(__MSYS__)
-#if !defined(_GNU_SOURCE) && !defined(__ANDROID__) /* NDK doesn't ship qsort_r(). */
-#define _GNU_SOURCE
-#endif
+# if !defined(_GNU_SOURCE) && !defined(__ANDROID__) /* NDK doesn't ship qsort_r(). */
+#   define _GNU_SOURCE
+# endif
 #endif
 
 #include <stdio.h>  /* fprintf */
@@ -241,8 +241,9 @@ typedef struct {
   unsigned d;
 } COVER_ctx_t;
 
-#if !defined(_GNU_SOURCE) && !defined(__APPLE__) && !defined(_MSC_VER)
-/* C90 only offers qsort() that needs a global context. */
+#if defined(ZSTD_USE_C90_QSORT) \
+  || (!defined(_GNU_SOURCE) && !defined(__APPLE__) && !defined(_MSC_VER))
+/* Use global context for non-reentrant sort functions */
 static COVER_ctx_t *g_coverCtx = NULL;
 #endif
 
@@ -328,7 +329,7 @@ static void stableSort(COVER_ctx_t *ctx) {
     qsort_r(ctx->suffix, ctx->suffixSize, sizeof(U32),
             ctx,
             (ctx->d <= 8 ? &COVER_strict_cmp8 : &COVER_strict_cmp));
-#elif defined(_GNU_SOURCE)
+#elif defined(_GNU_SOURCE) && !defined(ZSTD_USE_C90_QSORT)
     qsort_r(ctx->suffix, ctx->suffixSize, sizeof(U32),
             (ctx->d <= 8 ? &COVER_strict_cmp8 : &COVER_strict_cmp),
             ctx);
@@ -342,7 +343,7 @@ static void stableSort(COVER_ctx_t *ctx) {
           (ctx->d <= 8 ? &COVER_strict_cmp8 : &COVER_strict_cmp));
 #else /* C90 fallback.*/
     g_coverCtx = ctx;
-    /* TODO(cavalcanti): implement a reentrant qsort() when is not available. */
+    /* TODO(cavalcanti): implement a reentrant qsort() when _r is not available. */
     qsort(ctx->suffix, ctx->suffixSize, sizeof(U32),
           (ctx->d <= 8 ? &COVER_strict_cmp8 : &COVER_strict_cmp));
 #endif