Use zlib's crc32 routine instead of binascii when available. zlib's is faster

when compiled properly optimized and about the same speed otherwise.
This commit is contained in:
Gregory P. Smith 2008-03-19 01:46:10 +00:00
parent bde40078b0
commit b89a096d6d

View file

@ -6,8 +6,10 @@ import binascii, cStringIO
try: try:
import zlib # We may need its compression method import zlib # We may need its compression method
crc32 = zlib.crc32
except ImportError: except ImportError:
zlib = None zlib = None
crc32 = binascii.crc32
__all__ = ["BadZipfile", "error", "ZIP_STORED", "ZIP_DEFLATED", "is_zipfile", __all__ = ["BadZipfile", "error", "ZIP_STORED", "ZIP_DEFLATED", "is_zipfile",
"ZipInfo", "ZipFile", "PyZipFile", "LargeZipFile" ] "ZipInfo", "ZipFile", "PyZipFile", "LargeZipFile" ]
@ -940,7 +942,7 @@ class ZipFile:
if not buf: if not buf:
break break
file_size = file_size + len(buf) file_size = file_size + len(buf)
CRC = binascii.crc32(buf, CRC) CRC = crc32(buf, CRC)
if cmpr: if cmpr:
buf = cmpr.compress(buf) buf = cmpr.compress(buf)
compress_size = compress_size + len(buf) compress_size = compress_size + len(buf)
@ -983,7 +985,7 @@ class ZipFile:
zinfo.header_offset = self.fp.tell() # Start of header bytes zinfo.header_offset = self.fp.tell() # Start of header bytes
self._writecheck(zinfo) self._writecheck(zinfo)
self._didModify = True self._didModify = True
zinfo.CRC = binascii.crc32(bytes) # CRC-32 checksum zinfo.CRC = crc32(bytes) # CRC-32 checksum
if zinfo.compress_type == ZIP_DEFLATED: if zinfo.compress_type == ZIP_DEFLATED:
co = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION, co = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION,
zlib.DEFLATED, -15) zlib.DEFLATED, -15)
@ -1041,7 +1043,7 @@ class ZipFile:
if extra: if extra:
# Append a ZIP64 field to the extra's # Append a ZIP64 field to the extra's
extra_data = struct.pack( extra_data = struct.pack(
'<hh' + 'q'*len(extra), '<HH' + 'Q'*len(extra),
1, 8*len(extra), *extra) + extra_data 1, 8*len(extra), *extra) + extra_data
extract_version = max(45, zinfo.extract_version) extract_version = max(45, zinfo.extract_version)