Skip to content

Commit bacb94e

Browse files
author
Kazuki Suzuki Przyborowski
committed
Update pycatfile.py
1 parent 3619b6b commit bacb94e

1 file changed

Lines changed: 41 additions & 25 deletions

File tree

pycatfile.py

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2949,7 +2949,7 @@ def AppendNullBytes(indata=[], delimiter=__file_format_dict__['format_delimiter'
29492949
return outdata
29502950

29512951

2952-
def AppendFileHeader(fp, numfiles, checksumtype="crc32", formatspecs=__file_format_dict__):
2952+
def AppendFileHeader(fp, numfiles, extradata=[], checksumtype="crc32", formatspecs=__file_format_dict__):
29532953
if(not hasattr(fp, "write")):
29542954
return False
29552955
formatspecs = FormatSpecsListToDict(formatspecs)
@@ -2959,9 +2959,25 @@ def AppendFileHeader(fp, numfiles, checksumtype="crc32", formatspecs=__file_form
29592959
fileheader = AppendNullByte(
29602960
formatspecs['format_magic'] + fileheaderver, formatspecs['format_delimiter'])
29612961
fp.write(fileheader.encode('UTF-8'))
2962+
extrafields = format(len(extradata), 'x').lower()
2963+
extrasizestr = AppendNullByte(extrafields, formatspecs['format_delimiter'])
2964+
if(len(extradata) > 0):
2965+
extrasizestr = extrasizestr + \
2966+
AppendNullBytes(extradata, formatspecs['format_delimiter'])
2967+
extrasizelen = format(len(extrasizestr), 'x').lower()
2968+
catoutlist = []
2969+
catoutlist.append(extrasizelen)
2970+
catoutlist.append(extrafields)
29622971
fnumfiles = format(int(numfiles), 'x').lower()
29632972
fnumfilesa = AppendNullBytes(
2964-
[platform.system(), fnumfiles, checksumtype], formatspecs['format_delimiter'])
2973+
[platform.system(), fnumfiles], formatspecs['format_delimiter'])
2974+
fnumfilesa = fnumfilesa + AppendNullBytes(
2975+
catoutlist, formatspecs['format_delimiter'])
2976+
if(len(extradata) > 0):
2977+
fnumfilesa = fnumfilesa + AppendNullBytes(
2978+
extradata, formatspecs['format_delimiter'])
2979+
fnumfilesa = fnumfilesa + \
2980+
AppendNullByte(checksumtype, formatspecs['format_delimiter'])
29652981
catfileheadercshex = GetFileChecksum(
29662982
fileheader + fnumfilesa, checksumtype, True, formatspecs)
29672983
fnumfilesa = fnumfilesa + \
@@ -2982,7 +2998,7 @@ def AppendFileHeader(fp, numfiles, checksumtype="crc32", formatspecs=__file_form
29822998

29832999
def MakeEmptyFilePointer(fp, checksumtype="crc32", formatspecs=__file_format_dict__):
29843000
formatspecs = FormatSpecsListToDict(formatspecs)
2985-
AppendFileHeader(fp, 0, checksumtype, formatspecs)
3001+
AppendFileHeader(fp, 0, [], checksumtype, formatspecs)
29863002
return fp
29873003

29883004

@@ -3007,7 +3023,7 @@ def MakeEmptyFile(outfile, compression="auto", compresswholefile=True, compressi
30073023
if(not compresswholefile and fextname in outextlistwd):
30083024
compresswholefile = True
30093025
catfp = CompressOpenFile(outfile, True, compressionlevel)
3010-
catfp = AppendFileHeader(catfp, 0, checksumtype, formatspecs)
3026+
AppendFileHeader(catfp, 0, [], checksumtype, formatspecs)
30113027
if(outfile == "-" or outfile is None or hasattr(outfile, "read") or hasattr(outfile, "write")):
30123028
catfp = CompressArchiveFile(
30133029
catfp, compression, compressionlevel, formatspecs)
@@ -3141,7 +3157,7 @@ def AppendFilesWithContent(infiles, fp, dirlistfromtxt=False, filevalues=[], ext
31413157
GetDirList = infilelist
31423158
else:
31433159
GetDirList = ListDir(infilelist, followlink, False)
3144-
if(not isinstance(infiles, (list, tuple, ))):
3160+
if(not isinstance(GetDirList, (list, tuple, ))):
31453161
return False
31463162
FullSizeFiles = GetTotalSize(GetDirList)
31473163
if(not GetDirList):
@@ -3154,7 +3170,7 @@ def AppendFilesWithContent(infiles, fp, dirlistfromtxt=False, filevalues=[], ext
31543170
inodetocatinode = {}
31553171
numfiles = int(len(GetDirList))
31563172
fnumfiles = format(numfiles, 'x').lower()
3157-
AppendFileHeader(fp, fnumfiles, checksumtype, formatspecs)
3173+
AppendFileHeader(fp, fnumfiles, [], checksumtype, formatspecs)
31583174
FullSizeFilesAlt = 0
31593175
for curfname in GetDirList:
31603176
if(re.findall("^[.|/]", curfname)):
@@ -3389,7 +3405,7 @@ def AppendFilesWithContent(infiles, fp, dirlistfromtxt=False, filevalues=[], ext
33893405
ftypehex = format(ftype, 'x').lower()
33903406
catoutlist = [ftypehex, fname, flinkname, fsize, fatime, fmtime, fctime, fbtime, fmode, fwinattributes, fcompression,
33913407
fcsize, fuid, funame, fgid, fgname, fcurfid, fcurinode, flinkcount, fdev, fdev_minor, fdev_major, "+"+str(len(formatspecs['format_delimiter']))]
3392-
fp = AppendFileHeaderWithContent(
3408+
AppendFileHeaderWithContent(
33933409
fp, catoutlist, extradata, fcontents.read(), checksumtype, formatspecs)
33943410
if(numfiles > 0):
33953411
catfp.write(AppendNullBytes(
@@ -3416,7 +3432,7 @@ def AppendListsWithContent(inlist, fp, dirlistfromtxt=False, filevalues=[], extr
34163432
inodetocatinode = {}
34173433
numfiles = int(len(GetDirList))
34183434
fnumfiles = format(numfiles, 'x').lower()
3419-
AppendFileHeader(fp, fnumfiles, checksumtype, formatspecs)
3435+
AppendFileHeader(fp, fnumfiles, [], checksumtype, formatspecs)
34203436
for curfname in GetDirList:
34213437
ftype = format(curfname[0], 'x').lower()
34223438
if(re.findall("^[.|/]", curfname[1])):
@@ -3452,7 +3468,7 @@ def AppendListsWithContent(inlist, fp, dirlistfromtxt=False, filevalues=[], extr
34523468
catoutlist = [ftype, fname, flinkname, fsize, fatime, fmtime, fctime, fbtime, fmode, fwinattributes, fcompression, fcsize,
34533469
fuid, funame, fgid, fgname, fid, finode, flinkcount, fdev, fdev_minor, fdev_major, fseeknextfile]
34543470
fcontents.seek(0, 0)
3455-
fp = AppendFileHeaderWithContent(
3471+
AppendFileHeaderWithContent(
34563472
fp, catoutlist, extradata, fcontents.read(), checksumtype, formatspecs)
34573473
if(numfiles > 0):
34583474
fp.write(AppendNullBytes(
@@ -3488,7 +3504,7 @@ def AppendFilesWithContentToOutFile(infiles, outfile, dirlistfromtxt=False, comp
34883504
if(not compresswholefile and fextname in outextlistwd):
34893505
compresswholefile = True
34903506
catfp = CompressOpenFile(outfile, compresswholefile, compressionlevel)
3491-
catfp = AppendFilesWithContent(infiles, catfp, dirlistfromtxt, filevalues, extradata, compression,
3507+
AppendFilesWithContent(infiles, catfp, dirlistfromtxt, filevalues, extradata, compression,
34923508
compresswholefile, compressionlevel, compressionuselist, followlink, checksumtype, formatspecs, verbose)
34933509
if(outfile == "-" or outfile is None or hasattr(outfile, "read") or hasattr(outfile, "write")):
34943510
catfp = CompressArchiveFile(
@@ -3548,7 +3564,7 @@ def AppendListsWithContentToOutFile(inlist, outfile, dirlistfromtxt=False, compr
35483564
if(not compresswholefile and fextname in outextlistwd):
35493565
compresswholefile = True
35503566
catfp = CompressOpenFile(outfile, compresswholefile, compressionlevel)
3551-
catfp = AppendListsWithContent(inlist, catfp, dirlistfromtxt, filevalues, extradata, compression,
3567+
AppendListsWithContent(inlist, catfp, dirlistfromtxt, filevalues, extradata, compression,
35523568
compresswholefile, compressionlevel, followlink, checksumtype, formatspecs, verbose)
35533569
if(outfile == "-" or outfile is None or hasattr(outfile, "read") or hasattr(outfile, "write")):
35543570
catfp = CompressArchiveFile(
@@ -4366,7 +4382,7 @@ def PackArchiveFile(infiles, outfile, dirlistfromtxt=False, compression="auto",
43664382
GetDirList = infilelist
43674383
else:
43684384
GetDirList = ListDir(infilelist, followlink, False)
4369-
if(not isinstance(infiles, (list, tuple, ))):
4385+
if(not isinstance(GetDirList, (list, tuple, ))):
43704386
return False
43714387
FullSizeFiles = GetTotalSize(GetDirList)
43724388
if(not GetDirList):
@@ -4378,7 +4394,7 @@ def PackArchiveFile(infiles, outfile, dirlistfromtxt=False, compression="auto",
43784394
filetoinode = {}
43794395
inodetocatinode = {}
43804396
numfiles = int(len(GetDirList))
4381-
catfp = AppendFileHeader(catfp, numfiles, checksumtype, formatspecs)
4397+
AppendFileHeader(catfp, numfiles, [], checksumtype, formatspecs)
43824398
FullSizeFilesAlt = 0
43834399
for curfname in GetDirList:
43844400
if(re.findall("^[.|/]", curfname)):
@@ -4612,7 +4628,7 @@ def PackArchiveFile(infiles, outfile, dirlistfromtxt=False, compression="auto",
46124628
ftypehex = format(ftype, 'x').lower()
46134629
catoutlist = [ftypehex, fname, flinkname, fsize, fatime, fmtime, fctime, fbtime, fmode, fwinattributes, fcompression,
46144630
fcsize, fuid, funame, fgid, fgname, fcurfid, fcurinode, flinkcount, fdev, fdev_minor, fdev_major, "+"+str(len(formatspecs['format_delimiter']))]
4615-
catfp = AppendFileHeaderWithContent(
4631+
AppendFileHeaderWithContent(
46164632
catfp, catoutlist, extradata, fcontents.read(), checksumtype, formatspecs)
46174633
fcontents.close()
46184634
if(numfiles > 0):
@@ -4764,7 +4780,7 @@ def PackArchiveFileFromTarFile(infile, outfile, compression="auto", compresswhol
47644780
except FileNotFoundError:
47654781
return False
47664782
numfiles = int(len(tarfp.getmembers()))
4767-
catfp = AppendFileHeader(catfp, numfiles, checksumtype, formatspecs)
4783+
AppendFileHeader(catfp, numfiles, [], checksumtype, formatspecs)
47684784
for member in sorted(tarfp.getmembers(), key=lambda x: x.name):
47694785
if(re.findall("^[.|/]", member.name)):
47704786
fname = member.name
@@ -4894,7 +4910,7 @@ def PackArchiveFileFromTarFile(infile, outfile, compression="auto", compresswhol
48944910
ftypehex = format(ftype, 'x').lower()
48954911
catoutlist = [ftypehex, fname, flinkname, fsize, fatime, fmtime, fctime, fbtime, fmode, fwinattributes, fcompression,
48964912
fcsize, fuid, funame, fgid, fgname, fcurfid, fcurinode, flinkcount, fdev, fdev_minor, fdev_major, "+"+str(len(formatspecs['format_delimiter']))]
4897-
catfp = AppendFileHeaderWithContent(
4913+
AppendFileHeaderWithContent(
48984914
catfp, catoutlist, extradata, fcontents.read(), checksumtype, formatspecs)
48994915
fcontents.close()
49004916
if(numfiles > 0):
@@ -5010,7 +5026,7 @@ def PackArchiveFileFromZipFile(infile, outfile, compression="auto", compresswhol
50105026
if(ziptest):
50115027
VerbosePrintOut("Bad file found!")
50125028
numfiles = int(len(zipfp.infolist()))
5013-
catfp = AppendFileHeader(catfp, numfiles, checksumtype, formatspecs)
5029+
AppendFileHeader(catfp, numfiles, [], checksumtype, formatspecs)
50145030
for member in sorted(zipfp.infolist(), key=lambda x: x.filename):
50155031
if(re.findall("^[.|/]", member.filename)):
50165032
fname = member.filename
@@ -5165,7 +5181,7 @@ def PackArchiveFileFromZipFile(infile, outfile, compression="auto", compresswhol
51655181
ftypehex = format(ftype, 'x').lower()
51665182
catoutlist = [ftypehex, fname, flinkname, fsize, fatime, fmtime, fctime, fbtime, fmode, fwinattributes, fcompression,
51675183
fcsize, fuid, funame, fgid, fgname, fcurfid, fcurinode, flinkcount, fdev, fdev_minor, fdev_major, "+"+str(len(formatspecs['format_delimiter']))]
5168-
catfp = AppendFileHeaderWithContent(
5184+
AppendFileHeaderWithContent(
51695185
catfp, catoutlist, extradata, fcontents.read(), checksumtype, formatspecs)
51705186
fcontents.close()
51715187
if(numfiles > 0):
@@ -5266,7 +5282,7 @@ def PackArchiveFileFromRarFile(infile, outfile, compression="auto", compresswhol
52665282
if(rartest):
52675283
VerbosePrintOut("Bad file found!")
52685284
numfiles = int(len(rarfp.infolist()))
5269-
catfp = AppendFileHeader(catfp, numfiles, checksumtype, formatspecs)
5285+
AppendFileHeader(catfp, numfiles, [], checksumtype, formatspecs)
52705286
try:
52715287
catfp.flush()
52725288
if(hasattr(os, "sync")):
@@ -5466,7 +5482,7 @@ def PackArchiveFileFromRarFile(infile, outfile, compression="auto", compresswhol
54665482
ftypehex = format(ftype, 'x').lower()
54675483
catoutlist = [ftypehex, fname, flinkname, fsize, fatime, fmtime, fctime, fbtime, fmode, fwinattributes, fcompression,
54685484
fcsize, fuid, funame, fgid, fgname, fcurfid, fcurinode, flinkcount, fdev, fdev_minor, fdev_major, "+"+str(len(formatspecs['format_delimiter']))]
5469-
catfp = AppendFileHeaderWithContent(
5485+
AppendFileHeaderWithContent(
54705486
catfp, catoutlist, extradata, fcontents.read(), checksumtype, formatspecs)
54715487
fcontents.close()
54725488
if(numfiles > 0):
@@ -5567,7 +5583,7 @@ def PackArchiveFileFromSevenZipFile(infile, outfile, compression="auto", compres
55675583
if(sztestalt):
55685584
VerbosePrintOut("Bad file found!")
55695585
numfiles = int(len(szpfp.list()))
5570-
AppendFileHeader(catfp, numfiles, checksumtype, formatspecs)
5586+
AppendFileHeader(catfp, numfiles, [], checksumtype, formatspecs)
55715587
for member in sorted(szpfp.list(), key=lambda x: x.filename):
55725588
if(re.findall("^[.|/]", member.filename)):
55735589
fname = member.filename
@@ -5700,7 +5716,7 @@ def PackArchiveFileFromSevenZipFile(infile, outfile, compression="auto", compres
57005716
ftypehex = format(ftype, 'x').lower()
57015717
catoutlist = [ftypehex, fname, flinkname, fsize, fatime, fmtime, fctime, fbtime, fmode, fwinattributes, fcompression,
57025718
fcsize, fuid, funame, fgid, fgname, fcurfid, fcurinode, flinkcount, fdev, fdev_minor, fdev_major, "+"+str(len(formatspecs['format_delimiter']))]
5703-
catfp = AppendFileHeaderWithContent(
5719+
AppendFileHeaderWithContent(
57045720
catfp, catoutlist, extradata, fcontents.read(), checksumtype, formatspecs)
57055721
fcontents.close()
57065722
if(numfiles > 0):
@@ -7175,7 +7191,7 @@ def ListDirToArrayAlt(infiles, dirlistfromtxt=False, followlink=False, listonly=
71757191
GetDirList = infilelist
71767192
else:
71777193
GetDirList = ListDir(infilelist, followlink, False)
7178-
if(not isinstance(infiles, (list, tuple, ))):
7194+
if(not isinstance(GetDirList, (list, tuple, ))):
71797195
return False
71807196
FullSizeFiles = GetTotalSize(GetDirList)
71817197
if(not GetDirList):
@@ -8491,7 +8507,7 @@ def RePackArchiveFile(infile, outfile, compression="auto", compresswholefile=Tru
84918507
fnumfiles = int(listcatfiles['fnumfiles'])
84928508
if(lenlist > fnumfiles or lenlist < fnumfiles):
84938509
fnumfiles = lenlist
8494-
AppendFileHeader(catfp, fnumfiles, checksumtype, formatspecs)
8510+
AppendFileHeader(catfp, fnumfiles, [], checksumtype, formatspecs)
84958511
lenlist = len(listcatfiles['ffilelist'])
84968512
fnumfiles = int(listcatfiles['fnumfiles'])
84978513
lcfi = 0
@@ -8660,7 +8676,7 @@ def RePackArchiveFile(infile, outfile, compression="auto", compresswholefile=Tru
86608676
fcompression = ""
86618677
catoutlist = [ftypehex, fname, flinkname, fsize, fatime, fmtime, fctime, fbtime, fmode, fwinattributes, fcompression, fcsize,
86628678
fuid, funame, fgid, fgname, fcurfid, fcurinode, flinkcount, fdev, fdev_minor, fdev_major, fseeknextfile]
8663-
catfp = AppendFileHeaderWithContent(
8679+
AppendFileHeaderWithContent(
86648680
catfp, catoutlist, extradata, fcontents.read(), checksumtype, formatspecs)
86658681
fcontents.close()
86668682
lcfi = lcfi + 1

0 commit comments

Comments
 (0)