Skip to content

Commit b6206a4

Browse files
Add files via upload
1 parent e6c5961 commit b6206a4

1 file changed

Lines changed: 24 additions & 11 deletions

File tree

pyarchivefile.py

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5876,35 +5876,48 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
58765876
outfsize = fp.tell()
58775877
fp.seek(filestart, 0)
58785878
currentfilepos = fp.tell()
5879+
if(not isinstance(infile, FileLikeAdapter)):
5880+
5881+
# For uncompressed: optional mmap
5882+
mm = None
5883+
try:
5884+
base = _extract_base_fp(fp)
5885+
if base is not None:
5886+
mm = mmap.mmap(base.fileno(), 0, access=mmap.ACCESS_READ if "r" in mode else mmap.ACCESS_WRITE)
5887+
except Exception:
5888+
mm = None # fallback to normal file stream
5889+
readfp = FileLikeAdapter(fp, mode="rb", mm=mm)
5890+
else:
5891+
readfp = fp
58795892
ArchiveList = []
58805893
while True:
58815894
if currentfilepos >= outfsize: # stop when function signals False
58825895
break
5883-
oldfppos = fp.tell()
5884-
compresscheck = CheckCompressionType(fp, formatspecs, currentfilepos, False)
5896+
oldfppos = readfp.tell()
5897+
compresscheck = CheckCompressionType(readfp, formatspecs, currentfilepos, False)
58855898
if(IsNestedDict(formatspecs) and compresscheck in formatspecs):
58865899
pass
58875900
else:
5888-
checkcompressfile = CheckCompressionSubType(fp, formatspecs, currentfilepos, False)
5901+
checkcompressfile = CheckCompressionSubType(readfp, formatspecs, currentfilepos, False)
58895902
if(IsNestedDict(formatspecs) and checkcompressfile in formatspecs):
58905903
pass
58915904
else:
58925905
break
5893-
fp.seek(oldfppos, 0)
5906+
readfp.seek(oldfppos, 0)
58945907
if(compresscheck in formatspecs):
58955908
if currentfilepos >= outfsize: # stop when function signals False
58965909
break
5897-
oldfppos = fp.tell()
5898-
compresscheck = CheckCompressionType(fp, formatspecs, currentfilepos, False)
5910+
oldfppos = readfp.tell()
5911+
compresscheck = CheckCompressionType(readfp, formatspecs, currentfilepos, False)
58995912
if(IsNestedDict(formatspecs) and compresscheck in formatspecs):
59005913
informatspecs = formatspecs[compresscheck]
59015914
else:
59025915
break
5903-
fp.seek(oldfppos, 0)
5904-
ArchiveList.append(ReadFileDataWithContentToArray(fp, currentfilepos, seekstart, seekend, listonly, contentasfile, uncompress, skipchecksum, informatspecs, seektoend))
5905-
currentfilepos = fp.tell()
5916+
readfp.seek(oldfppos, 0)
5917+
ArchiveList.append(ReadFileDataWithContentToArray(readfp, currentfilepos, seekstart, seekend, listonly, contentasfile, uncompress, skipchecksum, informatspecs, seektoend))
5918+
currentfilepos = readfp.tell()
59065919
else:
5907-
infp = UncompressFileAlt(fp, formatspecs, currentfilepos)
5920+
infp = UncompressFileAlt(readfp, formatspecs, currentfilepos)
59085921
infp.seek(0, 0)
59095922
currentinfilepos = infp.tell()
59105923
try:
@@ -5927,7 +5940,7 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
59275940
infp.seek(oldinfppos, 0)
59285941
ArchiveList.append(ReadFileDataWithContentToArray(infp, currentinfilepos, seekstart, seekend, listonly, contentasfile, uncompress, skipchecksum, informatspecs, seektoend))
59295942
currentinfilepos = infp.tell()
5930-
currentfilepos = fp.tell()
5943+
currentfilepos = readfp.tell()
59315944
return ArchiveList
59325945

59335946

0 commit comments

Comments
 (0)