add missing check for embedded WADs.

This commit is contained in:
Christoph Oelckers 2023-12-16 07:41:22 +01:00
parent cffa49d05f
commit 7ce63abe6c
2 changed files with 30 additions and 13 deletions

View file

@ -396,6 +396,12 @@ void FResourceFile::PostProcessArchive(LumpFilterInfo *filter)
} }
JunkLeftoverFilters(max); JunkLeftoverFilters(max);
for (uint32_t i = 0; i < NumLumps; i++)
{
CheckEmbedded(i, filter);
}
} }
//========================================================================== //==========================================================================
@ -663,21 +669,30 @@ FileReader FResourceFile::GetEntryReader(uint32_t entry, int readertype, int rea
} }
if (!(Entries[entry].Flags & RESFF_COMPRESSED)) if (!(Entries[entry].Flags & RESFF_COMPRESSED))
{ {
if (readertype == READER_SHARED && mainThread) auto buf = Reader.GetBuffer();
readertype = READER_NEW; // if this is backed by a memory buffer, create a new reader directly referencing it.
if (readertype == READER_SHARED) if (buf != nullptr)
{ {
fr.OpenFilePart(Reader, Entries[entry].Position, Entries[entry].Length); fr.OpenMemory(buf + Entries[entry].Position, Entries[entry].Length);
} }
else if (readertype == READER_NEW) else
{ {
fr.OpenFile(FileName, Entries[entry].Position, Entries[entry].Length); if (readertype == READER_SHARED && !mainThread)
} readertype = READER_NEW;
else if (readertype == READER_CACHED) if (readertype == READER_SHARED)
{ {
Reader.Seek(Entries[entry].Position, FileReader::SeekSet); fr.OpenFilePart(Reader, Entries[entry].Position, Entries[entry].Length);
auto data = Reader.Read(Entries[entry].Length); }
fr.OpenMemoryArray(data); else if (readertype == READER_NEW)
{
fr.OpenFile(FileName, Entries[entry].Position, Entries[entry].Length);
}
else if (readertype == READER_CACHED)
{
Reader.Seek(Entries[entry].Position, FileReader::SeekSet);
auto data = Reader.Read(Entries[entry].Length);
fr.OpenMemoryArray(data);
}
} }
} }
else else

View file

@ -308,8 +308,10 @@ FIWadManager::FIWadManager(const char *firstfn, const char *optfn)
std::vector<std::string> fns; std::vector<std::string> fns;
fns.push_back(firstfn); fns.push_back(firstfn);
if (optfn) fns.push_back(optfn); if (optfn) fns.push_back(optfn);
FileSys::LumpFilterInfo lfi;
GetReserved(lfi);
if (check.InitMultipleFiles(fns, nullptr, nullptr)) if (check.InitMultipleFiles(fns, &lfi, nullptr))
{ {
int num = check.CheckNumForName("IWADINFO"); int num = check.CheckNumForName("IWADINFO");
if (num >= 0) if (num >= 0)