@@ -5902,35 +5902,48 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
59025902 outfsize = fp.tell()
59035903 fp.seek(filestart, 0)
59045904 currentfilepos = fp.tell()
5905+ if(not isinstance(infile, FileLikeAdapter)):
5906+
5907+ # For uncompressed: optional mmap
5908+ mm = None
5909+ try:
5910+ base = _extract_base_fp(fp)
5911+ if base is not None:
5912+ mm = mmap.mmap(base.fileno(), 0, access=mmap.ACCESS_READ if "r" in mode else mmap.ACCESS_WRITE)
5913+ except Exception:
5914+ mm = None # fallback to normal file stream
5915+ readfp = FileLikeAdapter(fp, mode="rb", mm=mm)
5916+ else:
5917+ readfp = fp
59055918 ArchiveList = []
59065919 while True:
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 pass
59135926 else:
5914- checkcompressfile = CheckCompressionSubType(fp , formatspecs, currentfilepos, False)
5927+ checkcompressfile = CheckCompressionSubType(readfp , formatspecs, currentfilepos, False)
59155928 if(IsNestedDict(formatspecs) and checkcompressfile in formatspecs):
59165929 pass
59175930 else:
59185931 break
5919- fp .seek(oldfppos, 0)
5932+ readfp .seek(oldfppos, 0)
59205933 if(compresscheck in formatspecs):
59215934 if currentfilepos >= outfsize: # stop when function signals False
59225935 break
5923- oldfppos = fp .tell()
5924- compresscheck = CheckCompressionType(fp , formatspecs, currentfilepos, False)
5936+ oldfppos = readfp .tell()
5937+ compresscheck = CheckCompressionType(readfp , formatspecs, currentfilepos, False)
59255938 if(IsNestedDict(formatspecs) and compresscheck in formatspecs):
59265939 informatspecs = formatspecs[compresscheck]
59275940 else:
59285941 break
5929- fp .seek(oldfppos, 0)
5930- ArchiveList.append(ReadFileDataWithContentToArray(fp , currentfilepos, seekstart, seekend, listonly, contentasfile, uncompress, skipchecksum, informatspecs, seektoend))
5931- currentfilepos = fp .tell()
5942+ readfp .seek(oldfppos, 0)
5943+ ArchiveList.append(ReadFileDataWithContentToArray(readfp , currentfilepos, seekstart, seekend, listonly, contentasfile, uncompress, skipchecksum, informatspecs, seektoend))
5944+ currentfilepos = readfp .tell()
59325945 else:
5933- infp = UncompressFileAlt(fp , formatspecs, currentfilepos)
5946+ infp = UncompressFileAlt(readfp , formatspecs, currentfilepos)
59345947 infp.seek(0, 0)
59355948 currentinfilepos = infp.tell()
59365949 try:
@@ -5953,7 +5966,7 @@ def ReadInFileWithContentToArray(infile, fmttype="auto", filestart=0, seekstart=
59535966 infp.seek(oldinfppos, 0)
59545967 ArchiveList.append(ReadFileDataWithContentToArray(infp, currentinfilepos, seekstart, seekend, listonly, contentasfile, uncompress, skipchecksum, informatspecs, seektoend))
59555968 currentinfilepos = infp.tell()
5956- currentfilepos = fp .tell()
5969+ currentfilepos = readfp .tell()
59575970 return ArchiveList
59585971
59595972
0 commit comments