mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-13 14:30:27 +02:00
Add a param to log filenames in virtfs handlers.
This commit is contained in:
1 parent
5c0796ed57
commit
55ed8d648b
2 files changed
+24
-9
No files matched your search
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user