Skip to content

Commit 4c8b861

Browse files
author
Kazuki Suzuki Przyborowski
committed
Update pycatfile.py
1 parent bacb94e commit 4c8b861

1 file changed

Lines changed: 69 additions & 19 deletions

File tree

pycatfile.py

Lines changed: 69 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5935,19 +5935,32 @@ def ArchiveFileSeekToFileNum(infile, seekto=0, listonly=False, contentasfile=Tru
59355935
if(catdel != formatspecs['format_delimiter']):
59365936
return False
59375937
catheader = ReadFileHeaderData(catfp, 4, formatspecs['format_delimiter'])
5938+
fnumextrafieldsize = int(catheader[2], 16)
5939+
fnumextrafields = int(catheader[3], 16)
5940+
extrafieldslist = []
5941+
if(fnumextrafields > 0):
5942+
extrafieldslist = ReadFileHeaderData(catfp, fnumextrafields, formatspecs['format_delimiter'])
5943+
catheader += ReadFileHeaderData(catfp, 2, formatspecs['format_delimiter'])
59385944
if(curloc > 0):
59395945
catfp.seek(curloc, 0)
59405946
catversion = re.findall("([\\d]+)", catstring)
59415947
fostype = catheader[0]
59425948
fprenumfiles = catheader[1]
59435949
fnumfiles = int(fprenumfiles, 16)
5944-
fprechecksumtype = catheader[2]
5945-
fprechecksum = catheader[3]
5950+
fprechecksumtype = catheader[4]
5951+
fprechecksum = catheader[5]
59465952
fileheader = AppendNullByte(catstring, formatspecs['format_delimiter'])
59475953
fnumfileshex = format(int(fnumfiles), 'x').lower()
59485954
fileheader = fileheader + \
5949-
AppendNullBytes([fnumfileshex, fprechecksumtype],
5955+
AppendNullBytes([fostype, fnumfileshex],
59505956
formatspecs['format_delimiter'])
5957+
fileheader = fileheader + AppendNullBytes(
5958+
[fnumextrafieldsize, fnumextrafields], formatspecs['format_delimiter'])
5959+
if(fnumextrafields > 0):
5960+
fileheader = fileheader + AppendNullBytes(
5961+
extrafieldslist, formatspecs['format_delimiter'])
5962+
fileheader = fileheader + \
5963+
AppendNullByte(fprechecksumtype, formatspecs['format_delimiter'])
59515964
catfileheadercshex = GetFileChecksum(
59525965
fileheader, fprechecksumtype, True, formatspecs)
59535966
fileheader = fileheader + \
@@ -5964,7 +5977,7 @@ def ArchiveFileSeekToFileNum(infile, seekto=0, listonly=False, contentasfile=Tru
59645977
if(fcompresstype==formatspecs['format_lower']):
59655978
fcompresstype = ""
59665979
catlist = {'fnumfiles': fnumfiles, 'fformat': catversions[0], 'fcompression': fcompresstype, 'fversion': catversions[1], 'fostype': fostype,
5967-
'fformatspecs': formatspecs, 'fchecksumtype': fprechecksumtype, 'fheaderchecksum': fprechecksum, 'frawheader': [catstring] + catheader, 'ffilelist': {}}
5980+
'fformatspecs': formatspecs, 'fchecksumtype': fprechecksumtype, 'fheaderchecksum': fprechecksum, 'frawheader': [catstring] + catheader, 'fextrafields': fnumextrafields, 'fextrafieldsize': fnumextrafieldsize, 'fextralist': extrafieldslist, 'ffilelist': {}}
59685981
if(seekto >= fnumfiles):
59695982
seekto = fnumfiles - 1
59705983
if(seekto < 0):
@@ -6201,19 +6214,31 @@ def ArchiveFileSeekToFileName(infile, seekfile=None, listonly=False, contentasfi
62016214
if(catdel != formatspecs['format_delimiter']):
62026215
return False
62036216
catheader = ReadFileHeaderData(catfp, 4, formatspecs['format_delimiter'])
6217+
fnumextrafieldsize = int(catheader[2], 16)
6218+
fnumextrafields = int(catheader[3], 16)
6219+
extrafieldslist = []
6220+
if(fnumextrafields > 0):
6221+
extrafieldslist = ReadFileHeaderData(catfp, fnumextrafields, formatspecs['format_delimiter'])
6222+
catheader += ReadFileHeaderData(catfp, 2, formatspecs['format_delimiter'])
62046223
if(curloc > 0):
62056224
catfp.seek(curloc, 0)
62066225
catversion = re.findall("([\\d]+)", catstring)
62076226
fostype = catheader[0]
6208-
fprenumfiles = catheader[1]
6209-
fnumfiles = int(fprenumfiles, 16)
6210-
fprechecksumtype = catheader[2]
6211-
fprechecksum = catheader[3]
6227+
fnumfiles = int(catheader[1], 16)
6228+
fprechecksumtype = catheader[4]
6229+
fprechecksum = catheader[5]
62126230
fileheader = AppendNullByte(catstring, formatspecs['format_delimiter'])
62136231
fnumfileshex = format(int(fnumfiles), 'x').lower()
62146232
fileheader = fileheader + \
6215-
AppendNullBytes([fnumfileshex, fprechecksumtype],
6233+
AppendNullBytes([fostype, fnumfileshex],
62166234
formatspecs['format_delimiter'])
6235+
fileheader = fileheader + AppendNullBytes(
6236+
[fnumextrafieldsize, fnumextrafields], formatspecs['format_delimiter'])
6237+
if(fnumextrafields > 0):
6238+
fileheader = fileheader + AppendNullBytes(
6239+
extrafieldslist, formatspecs['format_delimiter'])
6240+
fileheader = fileheader + \
6241+
AppendNullByte(fprechecksumtype, formatspecs['format_delimiter'])
62176242
catfileheadercshex = GetFileChecksum(
62186243
fileheader, fprechecksumtype, True, formatspecs)
62196244
fileheader = fileheader + \
@@ -6230,7 +6255,7 @@ def ArchiveFileSeekToFileName(infile, seekfile=None, listonly=False, contentasfi
62306255
if(fcompresstype==formatspecs['format_lower']):
62316256
fcompresstype = ""
62326257
catlist = {'fnumfiles': fnumfiles, 'fformat': catversions[0], 'fcompression': fcompresstype, 'fversion': catversions[1], 'fostype': fostype,
6233-
'fformatspecs': formatspecs, 'fchecksumtype': fprechecksumtype, 'fheaderchecksum': fprechecksum, 'frawheader': [catstring] + catheader, 'ffilelist': {}}
6258+
'fformatspecs': formatspecs, 'fchecksumtype': fprechecksumtype, 'fheaderchecksum': fprechecksum, 'frawheader': [catstring] + catheader, 'fextrafields': fnumextrafields, 'fextrafieldsize': fnumextrafieldsize, 'fextralist': extrafieldslist, 'ffilelist': {}}
62346259
seekto = fnumfiles - 1
62356260
filefound = False
62366261
if(seekto >= 0):
@@ -6505,20 +6530,33 @@ def ArchiveFileValidate(infile, formatspecs=__file_format_dict__, verbose=False,
65056530
if(catdel != formatspecs['format_delimiter']):
65066531
return False
65076532
catheader = ReadFileHeaderData(catfp, 4, formatspecs['format_delimiter'])
6533+
fnumextrafieldsize = int(catheader[2], 16)
6534+
fnumextrafields = int(catheader[3], 16)
6535+
extrafieldslist = []
6536+
if(fnumextrafields > 0):
6537+
extrafieldslist = ReadFileHeaderData(catfp, fnumextrafields, formatspecs['format_delimiter'])
6538+
catheader += ReadFileHeaderData(catfp, 2, formatspecs['format_delimiter'])
65086539
if(curloc > 0):
65096540
catfp.seek(curloc, 0)
65106541
catversion = re.findall("([\\d]+)", catstring)
65116542
fostype = catheader[0]
65126543
fprenumfiles = catheader[1]
65136544
fnumfiles = int(fprenumfiles, 16)
6514-
fprechecksumtype = catheader[2]
6515-
fprechecksum = catheader[3]
6545+
fprechecksumtype = catheader[4]
6546+
fprechecksum = catheader[5]
65166547
il = 0
65176548
fileheader = AppendNullByte(catstring, formatspecs['format_delimiter'])
65186549
fnumfileshex = format(int(fnumfiles), 'x').lower()
65196550
fileheader = fileheader + \
6520-
AppendNullBytes([fostype, fnumfileshex, fprechecksumtype],
6551+
AppendNullBytes([fostype, fnumfileshex],
65216552
formatspecs['format_delimiter'])
6553+
fileheader = fileheader + AppendNullBytes(
6554+
[fnumextrafieldsize, fnumextrafields], formatspecs['format_delimiter'])
6555+
if(fnumextrafields > 0):
6556+
fileheader = fileheader + AppendNullBytes(
6557+
extrafieldslist, formatspecs['format_delimiter'])
6558+
fileheader = fileheader + \
6559+
AppendNullByte(fprechecksumtype, formatspecs['format_delimiter'])
65226560
catfileheadercshex = GetFileChecksum(
65236561
fileheader, fprechecksumtype, True, formatspecs)
65246562
fileheader = fileheader + \
@@ -6835,19 +6873,31 @@ def ArchiveFileToArray(infile, seekstart=0, seekend=0, listonly=False, contentas
68356873
if(catdel != formatspecs['format_delimiter']):
68366874
return False
68376875
catheader = ReadFileHeaderData(catfp, 4, formatspecs['format_delimiter'])
6876+
fnumextrafieldsize = int(catheader[2], 16)
6877+
fnumextrafields = int(catheader[3], 16)
6878+
extrafieldslist = []
6879+
if(fnumextrafields > 0):
6880+
extrafieldslist = ReadFileHeaderData(catfp, fnumextrafields, formatspecs['format_delimiter'])
6881+
catheader += ReadFileHeaderData(catfp, 2, formatspecs['format_delimiter'])
68386882
if(curloc > 0):
68396883
catfp.seek(curloc, 0)
68406884
catversion = re.findall("([\\d]+)", catstring)
68416885
fostype = catheader[0]
6842-
fprenumfiles = catheader[1]
6843-
fnumfiles = int(fprenumfiles, 16)
6844-
fprechecksumtype = catheader[2]
6845-
fprechecksum = catheader[3]
6886+
fnumfiles = int(catheader[1], 16)
6887+
fprechecksumtype = catheader[4]
6888+
fprechecksum = catheader[5]
68466889
fileheader = AppendNullByte(catstring, formatspecs['format_delimiter'])
68476890
fnumfileshex = format(int(fnumfiles), 'x').lower()
68486891
fileheader = fileheader + \
6849-
AppendNullBytes([fostype, fnumfileshex, fprechecksumtype],
6892+
AppendNullBytes([fostype, fnumfileshex],
68506893
formatspecs['format_delimiter'])
6894+
fileheader = fileheader + AppendNullBytes(
6895+
[fnumextrafieldsize, fnumextrafields], formatspecs['format_delimiter'])
6896+
if(fnumextrafields > 0):
6897+
fileheader = fileheader + AppendNullBytes(
6898+
extrafieldslist, formatspecs['format_delimiter'])
6899+
fileheader = fileheader + \
6900+
AppendNullByte(fprechecksumtype, formatspecs['format_delimiter'])
68516901
catfileheadercshex = GetFileChecksum(
68526902
fileheader, fprechecksumtype, True, formatspecs)
68536903
fileheader = fileheader + \
@@ -6864,7 +6914,7 @@ def ArchiveFileToArray(infile, seekstart=0, seekend=0, listonly=False, contentas
68646914
if(fcompresstype==formatspecs['format_lower']):
68656915
fcompresstype = ""
68666916
catlist = {'fnumfiles': fnumfiles, 'fformat': catversions[0], 'fcompression': fcompresstype, 'fversion': catversions[1], 'fostype': fostype,
6867-
'fformatspecs': formatspecs, 'fchecksumtype': fprechecksumtype, 'fheaderchecksum': fprechecksum, 'frawheader': [catstring] + catheader, 'ffilelist': []}
6917+
'fformatspecs': formatspecs, 'fchecksumtype': fprechecksumtype, 'fheaderchecksum': fprechecksum, 'frawheader': [catstring] + catheader, 'fextrafields': fnumextrafields, 'fextrafieldsize': fnumextrafieldsize, 'fextralist': extrafieldslist, 'ffilelist': []}
68686918
if(seekstart < 0 and seekstart > fnumfiles):
68696919
seekstart = 0
68706920
if(seekend == 0 or seekend > fnumfiles and seekend < seekstart):

0 commit comments

Comments
 (0)