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