
On 01/25/2012 09:38 AM, Daniel P. Berrange wrote:
From: "Daniel P. Berrange" <berrange@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@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org