From 97d9ed131ae4fad7d54274cf5b74cf587b391bad Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 29 Mar 2017 01:49:04 +0300 Subject: Impliment loadFile in each virtual file system. --- src/fs/virtfs/virtfs.cpp | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) (limited to 'src/fs/virtfs/virtfs.cpp') 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::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 -- cgit v1.2.3-70-g09d2