diff --git a/src/common/filesystem/include/fs_filesystem.h b/src/common/filesystem/include/fs_filesystem.h index 0be66a9d3..1b5249cbc 100644 --- a/src/common/filesystem/include/fs_filesystem.h +++ b/src/common/filesystem/include/fs_filesystem.h @@ -169,8 +169,7 @@ public: return (int)Files.size(); } - void AddLump(FResourceLump* lump); - int AddFromBuffer(const char* name, const char* type, char* data, int size, int id, int flags); + int AddFromBuffer(const char* name, char* data, int size, int id, int flags); FileReader* GetFileReader(int wadnum); // Gets a FileReader object to the entire WAD void InitHashChains(); diff --git a/src/common/filesystem/source/filesystem.cpp b/src/common/filesystem/source/filesystem.cpp index bbaa389d9..7f36e513a 100644 --- a/src/common/filesystem/source/filesystem.cpp +++ b/src/common/filesystem/source/filesystem.cpp @@ -287,20 +287,6 @@ bool FileSystem::InitMultipleFiles (std::vector& filenames, LumpFil return true; } -//========================================================================== -// -// AddLump -// -// Adds a given lump to the directory. Does not perform rehashing -// -//========================================================================== - -void FileSystem::AddLump(FResourceLump *lump) -{ - FileInfo.resize(FileInfo.size() + 1); - FileInfo.back().SetFromLump(-1, lump, stringpool); -} - //========================================================================== // // AddFromBuffer @@ -309,27 +295,24 @@ void FileSystem::AddLump(FResourceLump *lump) // //========================================================================== -struct FMemoryLump : public FResourceLump -{ - FMemoryLump(const void* data, int length) - { - RefCount = -1; - LumpSize = length; - Cache = new char[length]; - memcpy(Cache, data, length); - } -}; +FResourceFile* CheckLump(const char* filename, FileReader& file, LumpFilterInfo*, FileSystemMessageFunc Printf, StringPool* sp); -int FileSystem::AddFromBuffer(const char* name, const char* type, char* data, int size, int id, int flags) +int FileSystem::AddFromBuffer(const char* name, char* data, int size, int id, int flags) { - std::string fullname = name; - fullname += '.'; - fullname += type; - auto newlump = new FMemoryLump(data, size); - newlump->LumpNameSetup(fullname.c_str(), stringpool); - AddLump(newlump); - FileInfo.back().resourceId = id; - return (int)FileInfo.size()-1; + FileReader fr; + fr.OpenMemoryArray((uint8_t*)data, size); + + // just wrap this into a single lump resource file (should be done a little better later.) + auto rf = CheckLump(name, fr, nullptr, nullptr, stringpool); + if (rf) + { + Files.push_back(rf); + FResourceLump* lump = rf->GetLump(0); + FileInfo.resize(FileInfo.size() + 1); + FileSystem::LumpRecord* lump_p = &FileInfo.back(); + lump_p->SetFromLump((int)Files.size(), lump, stringpool); + } + return (int)FileInfo.size() - 1; } //==========================================================================