diff options
Diffstat (limited to 'src/fs/virtfs/virtfs.cpp')
-rw-r--r-- | src/fs/virtfs/virtfs.cpp | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/src/fs/virtfs/virtfs.cpp b/src/fs/virtfs/virtfs.cpp index b36ee5ddd..9d1432270 100644 --- a/src/fs/virtfs/virtfs.cpp +++ b/src/fs/virtfs/virtfs.cpp @@ -562,32 +562,24 @@ namespace VirtFs return file->funcs->eof(file); } - char *loadFile(const std::string &restrict fileName, + char *loadFile(std::string filename, int &restrict fileSize) { - // Attempt to open the specified file using PhysicsFS - VirtFile *restrict const file = VirtFs::openRead(fileName); - - if (!file) + prepareFsPath(filename); + if (checkPath(filename) == false) { - logger->log("Warning: Failed to load %s.", - fileName.c_str()); + reportAlways("VirtFs::loadFile invalid path: %s", + filename.c_str()); return nullptr; } - - logger->log("Loaded %s/%s", - VirtFs::getRealDir(fileName).c_str(), - fileName.c_str()); - - fileSize = CAST_S32(VirtFs::fileLength(file)); - // Allocate memory and load the file - char *restrict const buffer = new char[fileSize]; - if (fileSize > 0) - buffer[fileSize - 1] = 0; - VirtFs::read(file, buffer, 1, fileSize); - VirtFs::close(file); - - return buffer; + FOR_EACH (std::vector<VirtFsEntry*>::const_iterator, it, mEntries) + { + VirtFsEntry *const entry = *it; + char *const buf = entry->funcs->loadFile(entry, filename, fileSize); + if (buf != nullptr) + return buf; + } + return nullptr; } } // namespace VirtFs |