diff --git a/Lib/uuid.py b/Lib/uuid.py index a6643ed..dae9ab2 100644 --- a/Lib/uuid.py +++ b/Lib/uuid.py @@ -456,7 +456,7 @@ def _netbios_getnode(): # If ctypes is available, use it to find system routines for UUID generation. # XXX This makes the module non-thread-safe! -_uuid_generate_random = _uuid_generate_time = _UuidCreate = None +_uuid_generate_time = _UuidCreate = None try: import ctypes, ctypes.util import sys @@ -471,12 +471,9 @@ try: lib = ctypes.CDLL(ctypes.util.find_library(libname)) except Exception: continue - if hasattr(lib, 'uuid_generate_random'): - _uuid_generate_random = lib.uuid_generate_random if hasattr(lib, 'uuid_generate_time'): _uuid_generate_time = lib.uuid_generate_time - if _uuid_generate_random is not None: - break # found everything we were looking for + break del _libnames # The uuid_generate_* functions are broken on MacOS X 10.5, as noted @@ -489,7 +486,7 @@ try: if sys.platform == 'darwin': import os if int(os.uname().release.split('.')[0]) >= 9: - _uuid_generate_random = _uuid_generate_time = None + _uuid_generate_time = None # On Windows prior to 2000, UuidCreate gives a UUID containing the # hardware address. On Windows 2000 and later, UuidCreate makes a @@ -600,20 +597,9 @@ def uuid3(namespace, name): def uuid4(): """Generate a random UUID.""" - - # When the system provides a version-4 UUID generator, use it. - if _uuid_generate_random: - _buffer = ctypes.create_string_buffer(16) - _uuid_generate_random(_buffer) - return UUID(bytes=bytes_(_buffer.raw)) - - # Otherwise, get randomness from urandom or the 'random' module. - try: - import os - return UUID(bytes=os.urandom(16), version=4) - except Exception: - import random - return UUID(int=random.getrandbits(128), version=4) + # Get randomness from urandom + import os + return UUID(bytes=os.urandom(16), version=4) def uuid5(namespace, name): """Generate a UUID from the SHA-1 hash of a namespace UUID and a name."""