~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

(gz) Simplify wrapping of os.urandom done by osutils (Martin Packman)

Show diffs side-by-side

added added

removed removed

Lines of Context:
945
945
    return os.fstat(f.fileno())[stat.ST_SIZE]
946
946
 
947
947
 
948
 
# Define rand_bytes based on platform.
949
 
try:
950
 
    # Python 2.4 and later have os.urandom,
951
 
    # but it doesn't work on some arches
952
 
    os.urandom(1)
953
 
    rand_bytes = os.urandom
954
 
except (NotImplementedError, AttributeError):
955
 
    # If python doesn't have os.urandom, or it doesn't work,
956
 
    # then try to first pull random data from /dev/urandom
 
948
# Alias os.urandom to support platforms (which?) without /dev/urandom and 
 
949
# override if it doesn't work. Avoid checking on windows where there is
 
950
# significant initialisation cost that can be avoided for some bzr calls.
 
951
 
 
952
rand_bytes = os.urandom
 
953
 
 
954
if rand_bytes.__module__ != "nt":
957
955
    try:
958
 
        rand_bytes = file('/dev/urandom', 'rb').read
959
 
    # Otherwise, use this hack as a last resort
960
 
    except (IOError, OSError):
 
956
        rand_bytes(1)
 
957
    except NotImplementedError:
961
958
        # not well seeded, but better than nothing
962
959
        def rand_bytes(n):
963
960
            import random