X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cmd%2Fdamage-cmd.py;h=07f0e03b25f3255d8ca522b4e661c61fd1fd91ff;hb=57368bb37dae3047d737892f7b4d1c6ac725bc53;hp=ca2e98c7a9bc06d77a1f1b457c71f97c11724bd9;hpb=d4100c81448484b8ea222fb78757bf003e181cf1;p=bup.git diff --git a/cmd/damage-cmd.py b/cmd/damage-cmd.py index ca2e98c..07f0e03 100755 --- a/cmd/damage-cmd.py +++ b/cmd/damage-cmd.py @@ -9,15 +9,13 @@ from __future__ import absolute_import import sys, os, random from bup import options -from bup.compat import range +from bup.compat import argv_bytes, bytes_from_uint, range from bup.helpers import log +from bup.io import path_msg def randblock(n): - l = [] - for i in range(n): - l.append(chr(random.randrange(0,256))) - return ''.join(l) + return b''.join(bytes_from_uint(random.randrange(0,256)) for i in range(n)) optspec = """ @@ -40,27 +38,27 @@ if opt.seed != None: random.seed(opt.seed) for name in extra: - log('Damaging "%s"...\n' % name) - f = open(name, 'r+b') - st = os.fstat(f.fileno()) - size = st.st_size - if opt.percent or opt.size: - ms1 = int(float(opt.percent or 0)/100.0*size) or size - ms2 = opt.size or size - maxsize = min(ms1, ms2) - else: - maxsize = 1 - chunks = opt.num or 10 - chunksize = size/chunks - for r in range(chunks): - sz = random.randrange(1, maxsize+1) - if sz > size: - sz = size - if opt.equal: - ofs = r*chunksize + name = argv_bytes(name) + log('Damaging "%s"...\n' % path_msg(name)) + with open(name, 'r+b') as f: + st = os.fstat(f.fileno()) + size = st.st_size + if opt.percent or opt.size: + ms1 = int(float(opt.percent or 0)/100.0*size) or size + ms2 = opt.size or size + maxsize = min(ms1, ms2) else: - ofs = random.randrange(0, size - sz + 1) - log(' %6d bytes at %d\n' % (sz, ofs)) - f.seek(ofs) - f.write(randblock(sz)) - f.close() + maxsize = 1 + chunks = opt.num or 10 + chunksize = size // chunks + for r in range(chunks): + sz = random.randrange(1, maxsize+1) + if sz > size: + sz = size + if opt.equal: + ofs = r*chunksize + else: + ofs = random.randrange(0, size - sz + 1) + log(' %6d bytes at %d\n' % (sz, ofs)) + f.seek(ofs) + f.write(randblock(sz))