summaryrefslogtreecommitdiff
path: root/src/misc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/misc.cpp')
-rw-r--r--src/misc.cpp12
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)
{