@@ -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