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