Add a param to log filenames in virtfs handlers.

This commit is contained in:
Unknown W. Brackets committed 2013-07-28 13:09:00 -07:00
1 parent 5c0796ed57
commit 55ed8d648b
2 files changed
+24 -9

No files matched your search

+20 -5
View File
@@ -103,7 +103,7 @@ void VirtualDiscFileSystem::LoadFileListIndex() {
entry.fileName = line.substr(filename_pos + 1, handler_pos - filename_pos - 1);
std::string handler = line.substr(handler_pos + 1);
if (handlers.find(handler) == handlers.end())
handlers[handler] = new Handler(handler.c_str());
handlers[handler] = new Handler(handler.c_str(), this);
entry.handler = handlers[handler];
} else {
entry.fileName = line.substr(filename_pos + 1);
@@ -688,11 +688,26 @@ bool VirtualDiscFileSystem::RemoveFile(const std::string &filename)
return false;
}
void VirtualDiscFileSystem::HandlerLogger(HandlerHandle fd, LogTypes::LOG_LEVELS level, const char *msg) {
GENERIC_LOG(LogTypes::FILESYS, level, "%s", msg);
void VirtualDiscFileSystem::HandlerLogger(void *arg, HandlerHandle handle, LogTypes::LOG_LEVELS level, const char *msg) {
VirtualDiscFileSystem *sys = static_cast<VirtualDiscFileSystem *>(arg);
// TODO: Probably could do this smarter / use a lookup.
const char *filename = NULL;
for (auto it = sys->entries.begin(), end = sys->entries.end(); it != end; ++it) {
if (it->second.fileIndex != (u32)-1 && it->second.handler.handle == handle) {
filename = sys->fileList[it->second.fileIndex].fileName.c_str();
break;
}
}
if (filename != NULL) {
GENERIC_LOG(LogTypes::FILESYS, level, "%s: %s", filename, msg);
} else {
GENERIC_LOG(LogTypes::FILESYS, level, "%s", msg);
}
}
VirtualDiscFileSystem::Handler::Handler(const char *filename) {
VirtualDiscFileSystem::Handler::Handler(const char *filename, VirtualDiscFileSystem *const sys) {
#ifdef _WIN32
HMODULE mod = LoadLibrary(filename);
@@ -709,7 +724,7 @@ VirtualDiscFileSystem::Handler::Handler(const char *filename) {
ERROR_LOG(FILESYS, "Unable to find all handler functions: %s", filename);
FreeLibrary(mod);
library = NULL;
} else if (!Init(&HandlerLogger)) {
} else if (!Init(&HandlerLogger, sys)) {
ERROR_LOG(FILESYS, "Unable to initialize handler: %s", filename);
FreeLibrary(mod);
library = NULL;
+4 -4
View File
@@ -55,17 +55,17 @@ private:
typedef void *HandlerLibrary;
typedef int HandlerHandle;
typedef s64 HandlerOffset;
typedef void (*HandlerLogFunc)(HandlerHandle fd, LogTypes::LOG_LEVELS level, const char *msg);
typedef void (*HandlerLogFunc)(void *arg, HandlerHandle handle, LogTypes::LOG_LEVELS level, const char *msg);
static void HandlerLogger(HandlerHandle fd, LogTypes::LOG_LEVELS level, const char *msg);
static void HandlerLogger(void *arg, HandlerHandle handle, LogTypes::LOG_LEVELS level, const char *msg);
// The primary purpose of handlers is to make it easier to work with large archives.
// However, they have other uses as well, such as patching individual files.
struct Handler {
Handler(const char *filename);
Handler(const char *filename, VirtualDiscFileSystem *const sys);
~Handler();
typedef bool (*InitFunc)(HandlerLogFunc logger);
typedef bool (*InitFunc)(HandlerLogFunc logger, void *loggerArg);
typedef void (*ShutdownFunc)();
typedef HandlerHandle (*OpenFunc)(const char *basePath, const char *filename);
typedef HandlerOffset (*SeekFunc)(HandlerHandle handle, HandlerOffset offset, FileMove origin);