1
0
Fork 0

plugin storage

This commit is contained in:
Torusrxxx 2016-06-21 11:13:47 +00:00 committed by GitHub
parent 794eba983e
commit 3610fc0e59
1 changed files with 46 additions and 2 deletions

View File

@ -19,6 +19,7 @@
#include "filehelper.h"
#include "xrefs.h"
#include "TraceRecord.h"
#include "plugin_loader.h"
/**
\brief Directory where program databases are stored (usually in \db). UTF-8 encoding.
@ -34,7 +35,7 @@ void DbSave(DbLoadSaveType saveType)
{
EXCLUSIVE_ACQUIRE(LockDatabase);
dprintf("Saving database...");
dputs("Saving database...");
DWORD ticks = GetTickCount();
JSON root = json_object();
@ -63,6 +64,27 @@ void DbSave(DbLoadSaveType saveType)
json_object_set_new(root, "notes", json_string(text));
BridgeFree(text);
}
//plugin data
PLUG_CB_LOADSAVEDB pluginSaveDb;
// Some plugins may wish to change this value so that all plugins after his or her plugin will save data into plugin-supplied storage instead of the system's.
// We back up this value so that the debugger is not fooled by such plugins.
JSON pluginRoot = json_object();
pluginSaveDb.root = pluginRoot;
switch(saveType)
{
case DbLoadSaveType::DebugData:
pluginSaveDb.loadSaveType = PLUG_DB_LOADSAVE_DATA;
break;
case DbLoadSaveType::All:
pluginSaveDb.loadSaveType = PLUG_DB_LOADSAVE_ALL;
break;
default:
pluginSaveDb.loadSaveType = 0;
break;
}
plugincbcall(CBTYPE::CB_SAVEDB, &pluginSaveDb);
json_object_set_new(root, "plugins", pluginRoot);
}
auto wdbpath = StringUtils::Utf8ToUtf16(dbpath);
@ -166,10 +188,32 @@ void DbLoad(DbLoadSaveType loadType)
TraceRecord.loadFromDb(root);
BpCacheLoad(root);
// Load notes
const char* text = json_string_value(json_object_get(root, "notes"));
GuiSetDebuggeeNotes(text);
// Plugins
JSON pluginRoot = json_object_get(root, "plugins");
if(pluginRoot)
{
PLUG_CB_LOADSAVEDB pluginLoadDb;
pluginLoadDb.root = pluginRoot;
switch(loadType)
{
case DbLoadSaveType::DebugData:
pluginLoadDb.loadSaveType = PLUG_DB_LOADSAVE_DATA;
break;
case DbLoadSaveType::All:
pluginLoadDb.loadSaveType = PLUG_DB_LOADSAVE_ALL;
break;
default:
pluginLoadDb.loadSaveType = 0;
break;
}
//TODO: We have to increment the reference count before every callback invoke.
plugincbcall(CB_LOADDB, &pluginLoadDb);
json_decref(pluginRoot);
}
}
// Free root