From dc736b0a3e02f2470d7c580e1f3c2d4654170597 Mon Sep 17 00:00:00 2001 From: NAKAMURA Takumi Date: Sun, 6 May 2012 08:24:24 +0000 Subject: [PATCH] Unix/Process.inc: Give more useful random seed to srand. Workaround for PR12743. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156252 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/Unix/Process.inc | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/Support/Unix/Process.inc b/lib/Support/Unix/Process.inc index de982625e96..dd855b0d3ff 100644 --- a/lib/Support/Unix/Process.inc +++ b/lib/Support/Unix/Process.inc @@ -298,11 +298,24 @@ const char *Process::ResetColor() { return "\033[0m"; } +#if !defined(HAVE_ARC4RANDOM) +static unsigned GetRandomNumberSeed() { + unsigned seed = ::time(NULL); // FIXME: It might not provide unique seed. + FILE *RandomSource = ::fopen("/dev/urandom", "r"); + if (RandomSource) { + ::fread((void *)&seed, sizeof(seed), 1, RandomSource); + ::fclose(RandomSource); + } + return seed; +} +#endif + unsigned llvm::sys::Process::GetRandomNumber() { #if defined(HAVE_ARC4RANDOM) return arc4random(); #else - static int x = (::srand(::time(NULL)), 0); + static int x = (::srand(GetRandomNumberSeed()), 0); + (void)x; return ::rand(); #endif }