[bug#78375] daemon: Replace random_shuffle() with shuffle()

Message ID CE4D0CF1-1F61-466D-B480-D83DA1E60663@gmail.com
State New
Headers
Series [bug#78375] daemon: Replace random_shuffle() with shuffle() |

Commit Message

Congcong Kuo May 11, 2025, 9:24 a.m. UTC
  Hello,

I am trying to build libstore using the Zig build system. The default C++ version of ‘zig c++’ is gnu++17 and random_shuffle() has been removed in C++ 14 standard.

Even though guix is built using gnu++11 currently, I think it is not harmful to replace a deprecated function.

Regards,
Kuo
From fc7ccca0a1a58e16d1c4729b31bc477deddb308b Mon Sep 17 00:00:00 2001
From: Congcong Kuo <congcong.kuo@gmail.com>
Date: Sun, 11 May 2025 16:31:22 +0800
Subject: [PATCH] Replace random_shuffle with shuffle

---
 nix/libstore/gc.cc | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
  

Patch

diff --git a/nix/libstore/gc.cc b/nix/libstore/gc.cc
index 1651911..261ea79 100644
--- a/nix/libstore/gc.cc
+++ b/nix/libstore/gc.cc
@@ -4,6 +4,7 @@ 
 
 #include <functional>
 #include <queue>
+#include <random>
 #include <algorithm>
 
 #include <sys/types.h>
@@ -745,7 +746,9 @@  void LocalStore::collectGarbage(const GCOptions & options, GCResults & results)
                alphabetically first (e.g. /nix/store/000...).  This
                matters when using --max-freed etc. */
             vector<Path> entries_(entries.begin(), entries.end());
-            random_shuffle(entries_.begin(), entries_.end());
+            std::random_device seeder;
+            std::default_random_engine generator(seeder());
+            std::shuffle(entries_.begin(), entries_.end(), generator);
 
             foreach (vector<Path>::iterator, i, entries_)
                 tryToDelete(state, *i);