Skip to content

Commit a9e85c6

Browse files
committed
Introduce _calc_initial_entry_offset and refactor
1 parent a4b410b commit a9e85c6

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

Lib/zipfile/__init__.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1446,21 +1446,13 @@ def _repack(self, zfile, *, chunk_size=2**20):
14461446
# doesn't match the actual entry order
14471447
filelist = sorted(zfile.filelist, key=lambda x: x.header_offset)
14481448

1449-
# calculate the starting entry offset (bytes to skip)
1450-
entry_offset = 0
1451-
14521449
try:
14531450
data_offset = filelist[0].header_offset
14541451
except IndexError:
14551452
data_offset = zfile.start_dir
14561453

1457-
if data_offset > 0:
1458-
if self.debug > 2:
1459-
print('scanning file signatures before:', data_offset)
1460-
for pos in self._iter_scan_signature(fp, stringFileHeader, 0, data_offset):
1461-
if self._starts_consecutive_file_entries(fp, pos, data_offset):
1462-
entry_offset = data_offset - pos
1463-
break
1454+
# calculate the starting entry offset (bytes to skip)
1455+
entry_offset = self._calc_initial_entry_offset(fp, data_offset)
14641456

14651457
# move file entries
14661458
for i, info in enumerate(filelist):
@@ -1502,6 +1494,15 @@ def _repack(self, zfile, *, chunk_size=2**20):
15021494
zfile.start_dir -= entry_offset
15031495
zfile._didModify = True
15041496

1497+
def _calc_initial_entry_offset(self, fp, data_offset):
1498+
if data_offset > 0:
1499+
if self.debug > 2:
1500+
print('scanning file signatures before:', data_offset)
1501+
for pos in self._iter_scan_signature(fp, stringFileHeader, 0, data_offset):
1502+
if self._starts_consecutive_file_entries(fp, pos, data_offset):
1503+
return data_offset - pos
1504+
return 0
1505+
15051506
def _iter_scan_signature(self, fp, signature, start_offset, end_offset, chunk_size=4096):
15061507
sig_len = len(signature)
15071508
remainder = b''

0 commit comments

Comments
 (0)