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
This commit is contained in:
NAKAMURA Takumi 2012-05-06 08:24:24 +00:00
parent 24cddd5c9a
commit dc736b0a3e

View File

@ -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
}