diff options
author | Sadie Powell <sadie@witchery.services> | 2024-03-07 21:56:58 +0000 |
---|---|---|
committer | Sadie Powell <sadie@witchery.services> | 2024-03-07 22:52:41 +0000 |
commit | 464e6b8010c11708bcbed7cf6b2d972977f0e286 (patch) | |
tree | 0adee0c876aee23acb1e16e2195df90500ff6e65 /src/misc.cpp | |
parent | 3272c1bbc65eaa29ba63e176ec76702c5b21d367 (diff) |
Use the C++11 random number generator instead of rand().
This is safer, faster, and doesn't require seeding.
Diffstat (limited to 'src/misc.cpp')
-rw-r--r-- | src/misc.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/misc.cpp b/src/misc.cpp index b40c69844..f7ada8f60 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -20,7 +20,9 @@ #include "sockets.h" #include <cerrno> +#include <climits> #include <numeric> +#include <random> #include <sys/stat.h> #include <sys/types.h> #ifndef _WIN32 @@ -745,10 +747,18 @@ Anope::string Anope::Random(size_t len) }; Anope::string buf; for (size_t i = 0; i < len; ++i) - buf.append(chars[rand() % sizeof(chars)]); + buf.append(chars[Anope::RandomNumber() % sizeof(chars)]); return buf; } +int Anope::RandomNumber() +{ + static std::random_device device; + static std::mt19937 engine(device()); + static std::uniform_int_distribution<int> dist(INT_MIN, INT_MAX); + return dist(engine); +} + // Implementation of https://en.wikipedia.org/wiki/Levenshtein_distance size_t Anope::Distance(const Anope::string &s1, const Anope::string &s2) { |