[llvm] r200767 - Implemented support for Process::GetRandomNumber on Windows.

Aaron Ballman aaron at aaronballman.com
Tue Feb 4 06:49:21 PST 2014


Author: aaronballman
Date: Tue Feb  4 08:49:21 2014
New Revision: 200767

URL: http://llvm.org/viewvc/llvm-project?rev=200767&view=rev
Log:
Implemented support for Process::GetRandomNumber on Windows.

Patch thanks to Stephan Tolksdorf!

Modified:
    llvm/trunk/lib/Support/Process.cpp
    llvm/trunk/lib/Support/Windows/Process.inc
    llvm/trunk/unittests/Support/ProcessTest.cpp

Modified: llvm/trunk/lib/Support/Process.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Process.cpp?rev=200767&r1=200766&r2=200767&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Process.cpp (original)
+++ llvm/trunk/lib/Support/Process.cpp Tue Feb  4 08:49:21 2014
@@ -12,6 +12,11 @@
 //===----------------------------------------------------------------------===//
 
 #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"
 

Modified: llvm/trunk/lib/Support/Windows/Process.inc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Windows/Process.inc?rev=200767&r1=200766&r2=200767&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Windows/Process.inc (original)
+++ llvm/trunk/lib/Support/Windows/Process.inc Tue Feb  4 08:49:21 2014
@@ -360,3 +360,10 @@ const char *Process::ResetColor() {
   SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), defaultColors());
   return 0;
 }
+
+unsigned Process::GetRandomNumber() {
+  unsigned int result;
+  const errno_t ec = rand_s(&result);
+  assert(ec == 0 && "rand_s failed");
+  return result;
+}

Modified: llvm/trunk/unittests/Support/ProcessTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/ProcessTest.cpp?rev=200767&r1=200766&r2=200767&view=diff
==============================================================================
--- llvm/trunk/unittests/Support/ProcessTest.cpp (original)
+++ llvm/trunk/unittests/Support/ProcessTest.cpp Tue Feb  4 08:49:21 2014
@@ -39,6 +39,13 @@ TEST(ProcessTest, SelfProcess) {
   EXPECT_GT(TimeValue::MaxTime, process::get_self()->get_wall_time());
 }
 
+TEST(ProcessTest, GetRandomNumberTest) {
+  const unsigned r1 = Process::GetRandomNumber();
+  const unsigned r2 = Process::GetRandomNumber();
+  // It should be extremely unlikely that both r1 and r2 are 0.
+  EXPECT_NE((r1 | r2), 0);
+}
+
 #ifdef _MSC_VER
 #define setenv(name, var, ignore) _putenv_s(name, var)
 #endif





More information about the llvm-commits mailing list