On 01/25/2012 09:38 AM, Daniel P. Berrange wrote:
From: "Daniel P. Berrange" <berrange(a)redhat.com>
The old virRandom() API was not generating good random numbers.
Replace it with a new API virRandomBits which instead of being
told the upper limit, gets told the number of bits of randomness
required.
* src/util/virrandom.c, src/util/virrandom.h: Add virRandomBits,
and move virRandomInitialize
* src/util/util.h, src/util/util.c: Delete virRandom and
virRandomInitialize
* src/libvirt.c, src/security/security_selinux.c,
src/test/test_driver.c, src/util/iohelper.c: Update for
changes from virRandom to virRandomBits
* src/storage/storage_backend_iscsi.c: Remove bogus call
to virRandomInitialize & convert to virRandomBits
---
+++ b/src/storage/storage_backend_iscsi.c
-
- snprintf(temp_ifacename, sizeof(temp_ifacename), "libvirt-iface-%08x",
- virRandom(1024 * 1024 * 1024));
+ snprintf(temp_ifacename, sizeof(temp_ifacename), "libvirt-iface-%08llx",
+ (unsigned long long)virRandomBits(30));
Hmm - the cast is indeed necessary if we don't want to rely on PRIx64,
thanks to the change in return type as we switch to the new function;
knowing we only have 30 bits, we could get away with a smaller cast, as in:
"%08x", (unsigned)virRandomBits(30)
but this is not enough of an issue to be worth changing.
+
+
+uint64_t virRandomBits(int nbits)
+{
You lost my documentation comments from my proposal:
/* Return an evenly distributed random number between [0,2^nbits), where
nbits must be in the range (0,64]. */
Also, the tests failed to compile. Squash this in, and then you have my
ACK:
diff --git i/tests/testutils.c w/tests/testutils.c
index acdfdc1..fccea17 100644
--- i/tests/testutils.c
+++ w/tests/testutils.c
@@ -1,7 +1,7 @@
/*
* testutils.c: basic test utils
*
- * Copyright (C) 2005-2011 Red Hat, Inc.
+ * Copyright (C) 2005-2012 Red Hat, Inc.
*
* See COPYING.LIB for the License of this software
*
@@ -34,6 +34,7 @@
#include "buf.h"
#include "logging.h"
#include "command.h"
+#include "virrandom.h"
#if TEST_OOM_TRACE
# include <execinfo.h>
--
Eric Blake eblake(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org