Kaydet (Commit) b89a096d authored tarafından Gregory P. Smith's avatar Gregory P. Smith

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

when compiled properly optimized and about the same speed otherwise.
üst bde40078
...@@ -6,8 +6,10 @@ import binascii, cStringIO ...@@ -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: ...@@ -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: ...@@ -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: ...@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment