summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support
diff options
context:
space:
mode:
authorAaron Ballman <aaron@aaronballman.com>2014-02-11 02:47:33 +0000
committerAaron Ballman <aaron@aaronballman.com>2014-02-11 02:47:33 +0000
commit3f5e8b8dc1b73eff352195e3f02bb5752690fb90 (patch)
tree7f38a89a4e7585638e6e4ef093576d668147b46d /llvm/lib/Support
parent8b808d64af8375d77a08d42520c97c7df8e9c3d0 (diff)
downloadbcm5719-llvm-3f5e8b8dc1b73eff352195e3f02bb5752690fb90.tar.gz
bcm5719-llvm-3f5e8b8dc1b73eff352195e3f02bb5752690fb90.zip
Hopefully fixing the MinGW 32 build, which was broken by r200767. Not using rand_s() since MinGW does not have an implementation for it, but instead using the underlying CryptGenRandom APIs.
llvm-svn: 201124
Diffstat (limited to 'llvm/lib/Support')
-rw-r--r--llvm/lib/Support/Process.cpp5
-rw-r--r--llvm/lib/Support/Windows/Process.inc15
2 files changed, 11 insertions, 9 deletions
diff --git a/llvm/lib/Support/Process.cpp b/llvm/lib/Support/Process.cpp
index 1360842753d..d5168f03a6d 100644
--- a/llvm/lib/Support/Process.cpp
+++ b/llvm/lib/Support/Process.cpp
@@ -12,11 +12,6 @@
//===----------------------------------------------------------------------===//
#include "llvm/Config/config.h"
-#if LLVM_ON_WIN32
- // This define makes stdlib.h declare the rand_s function.
-#define _CRT_RAND_S
-#include <stdlib.h>
-#endif
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Process.h"
diff --git a/llvm/lib/Support/Windows/Process.inc b/llvm/lib/Support/Windows/Process.inc
index 62b6da0cb1b..a0e3bc413a3 100644
--- a/llvm/lib/Support/Windows/Process.inc
+++ b/llvm/lib/Support/Windows/Process.inc
@@ -362,8 +362,15 @@ const char *Process::ResetColor() {
}
unsigned Process::GetRandomNumber() {
- unsigned int result;
- const int ec = rand_s(&result);
- assert(ec == 0 && "rand_s failed");
- return result;
+ HCRYPTPROV HCPC;
+ if (!::CryptAcquireContextW(&HCPC, NULL, NULL, PROV_RSA_FULL,
+ CRYPT_VERIFYCONTEXT))
+ assert(false && "Could not acquire a cryptographic context");
+
+ ScopedCryptContext CryptoProvider(HCPC);
+ unsigned Ret;
+ if (!::CryptGenRandom(CryptoProvider, sizeof(Ret),
+ reinterpret_cast<BYTE *>(&Ret)))
+ assert(false && "Could not generate a random number");
+ return Ret;
}
OpenPOWER on IntegriCloud