Skip to content

Commit

Permalink
We don't need to support win2k, so we can always use rand_s. We can a…
Browse files Browse the repository at this point in the history
…lso use this for the non-secure case, which simplifies things since we shouldn't need to worry about threading anymore.

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1520 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
deanm@google.com committed Aug 29, 2008
1 parent 8a2cebb commit 3ec0907
Showing 1 changed file with 2 additions and 25 deletions.
27 changes: 2 additions & 25 deletions chrome/common/rand_util.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,40 +5,18 @@
#include "chrome/common/rand_util.h"

#include <stdlib.h>
#include <time.h>

#include "base/logging.h"
#include "base/thread_local_storage.h"
#include "base/time.h"
#include "base/win_util.h"

namespace rand_util {

// TODO(evanm): don't rely on static initialization.
// Using TLS since srand() needs to be called once in each thread.
TLSSlot g_tls_index;

int RandInt(int min, int max) {
if (g_tls_index.Get() == 0) {
g_tls_index.Set(reinterpret_cast<void*>(1));
TimeDelta now = TimeTicks::UnreliableHighResNow() - TimeTicks();
unsigned int seed = static_cast<unsigned int>(now.InMicroseconds());
srand(seed);
}

// From the rand man page, use this instead of just rand() % max, so that the
// higher bits are used.
return min + static_cast<int>(static_cast<double>(max - min + 1) *
(::rand() / (RAND_MAX + 1.0)));
return RandIntSecure(min, max);
}

int RandIntSecure(int min, int max) {
if (win_util::GetWinVersion() < win_util::WINVERSION_XP) {
// rand_s needs XP and later.
return RandInt(min, max);
}

unsigned int number;
// This code will not work on win2k, which we do not support.
errno_t rv = rand_s(&number);
DCHECK(rv == 0) << "rand_s failed with error " << rv;

Expand All @@ -49,4 +27,3 @@ int RandIntSecure(int min, int max) {
}

} // namespace rand_util

0 comments on commit 3ec0907

Please sign in to comment.