Skip to content

Commit a1fa864

Browse files
Add files via upload
1 parent 415db32 commit a1fa864

1 file changed

Lines changed: 24 additions & 11 deletions

File tree

pycatfile.py

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5888,35 +5888,48 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
58885888
outfsize = fp.tell()
58895889
fp.seek(filestart, 0)
58905890
currentfilepos = fp.tell()
5891+
if(not isinstance(infile, FileLikeAdapter)):
5892+
5893+
# For uncompressed: optional mmap
5894+
mm = None
5895+
try:
5896+
base = _extract_base_fp(fp)
5897+
if base is not None:
5898+
mm = mmap.mmap(base.fileno(), 0, access=mmap.ACCESS_READ if "r" in mode else mmap.ACCESS_WRITE)
5899+
except Exception:
5900+
mm = None # fallback to normal file stream
5901+
readfp = FileLikeAdapter(fp, mode="rb", mm=mm)
5902+
else:
5903+
readfp = fp
58915904
ArchiveList = []
58925905
while True:
58935906
if currentfilepos >= outfsize: # stop when function signals False
58945907
break
5895-
oldfppos = fp.tell()
5896-
compresscheck = CheckCompressionType(fp, formatspecs, currentfilepos, False)
5908+
oldfppos = readfp.tell()
5909+
compresscheck = CheckCompressionType(readfp, formatspecs, currentfilepos, False)
58975910
if(IsNestedDict(formatspecs) and compresscheck in formatspecs):
58985911
pass
58995912
else:
5900-
checkcompressfile = CheckCompressionSubType(fp, formatspecs, currentfilepos, False)
5913+
checkcompressfile = CheckCompressionSubType(readfp, formatspecs, currentfilepos, False)
59015914
if(IsNestedDict(formatspecs) and checkcompressfile in formatspecs):
59025915
pass
59035916
else:
59045917
break
5905-
fp.seek(oldfppos, 0)
5918+
readfp.seek(oldfppos, 0)
59065919
if(compresscheck in formatspecs):
59075920
if currentfilepos >= outfsize: # stop when function signals False
59085921
break
5909-
oldfppos = fp.tell()
5910-
compresscheck = CheckCompressionType(fp, formatspecs, currentfilepos, False)
5922+
oldfppos = readfp.tell()
5923+
compresscheck = CheckCompressionType(readfp, formatspecs, currentfilepos, False)
59115924
if(IsNestedDict(formatspecs) and compresscheck in formatspecs):
59125925
informatspecs = formatspecs[compresscheck]
59135926
else:
59145927
break
5915-
fp.seek(oldfppos, 0)
5916-
ArchiveList.append(ReadFileDataWithContentToArray(fp, currentfilepos, seekstart, seekend, listonly, contentasfile, uncompress, skipchecksum, informatspecs, seektoend))
5917-
currentfilepos = fp.tell()
5928+
readfp.seek(oldfppos, 0)
5929+
ArchiveList.append(ReadFileDataWithContentToArray(readfp, currentfilepos, seekstart, seekend, listonly, contentasfile, uncompress, skipchecksum, informatspecs, seektoend))
5930+
currentfilepos = readfp.tell()
59185931
else:
5919-
infp = UncompressFileAlt(fp, formatspecs, currentfilepos)
5932+
infp = UncompressFileAlt(readfp, formatspecs, currentfilepos)
59205933
infp.seek(0, 0)
59215934
currentinfilepos = infp.tell()
59225935
try:
@@ -5939,7 +5952,7 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
59395952
infp.seek(oldinfppos, 0)
59405953
ArchiveList.append(ReadFileDataWithContentToArray(infp, currentinfilepos, seekstart, seekend, listonly, contentasfile, uncompress, skipchecksum, informatspecs, seektoend))
59415954
currentinfilepos = infp.tell()
5942-
currentfilepos = fp.tell()
5955+
currentfilepos = readfp.tell()
59435956
return ArchiveList
59445957

59455958

0 commit comments

Comments
 (0)