1.1 --- a/iixr/files.py Fri Oct 02 00:22:10 2009 +0200
1.2 +++ b/iixr/files.py Sat Oct 03 03:03:32 2009 +0200
1.3 @@ -19,6 +19,7 @@
1.4 """
1.5
1.6 from iixr.data import vint
1.7 +from array import array
1.8 import zlib
1.9
1.10 # Constants.
1.11 @@ -105,24 +106,19 @@
1.12
1.13 # Read each byte, adding it to the number.
1.14
1.15 - read = self.f.read
1.16 + a = array('B')
1.17 + fromfile = a.fromfile
1.18 + f = self.f
1.19
1.20 - c = read(1)
1.21 - if c:
1.22 - csd = ord(c)
1.23 - if csd < 128:
1.24 - return csd
1.25 - else:
1.26 - shift = 0
1.27 - number = 0
1.28 - while csd & 128:
1.29 - number += ((csd & 127) << shift)
1.30 - shift += 7
1.31 - csd = ord(read(1))
1.32 - else:
1.33 - return number + (csd << shift)
1.34 + fromfile(f, 1)
1.35 + csd = a[-1]
1.36 + if csd < 128:
1.37 + return csd
1.38 else:
1.39 - raise EOFError
1.40 + while csd & 128:
1.41 + fromfile(f, 1)
1.42 + csd = a[-1]
1.43 + return sum([((csd & 127) << (number * 7)) for (number, csd) in enumerate(a)])
1.44
1.45 def read_string(self, decompress=0):
1.46