diff --git a/src/internal/mana_analysis.h b/src/internal/mana_analysis.h index dcd8f25..d2dabf1 100644 --- a/src/internal/mana_analysis.h +++ b/src/internal/mana_analysis.h @@ -286,7 +286,7 @@ struct ManaCountingSink: public IManaSink totalBytes = 0; } - void init() override {} + void init(int, const char **) override {} void shutdown() override {} void begin_run(const char *descriptor_json) override { diff --git a/src/internal/mana_c_api.h b/src/internal/mana_c_api.h index d24932a..18ea5b3 100644 --- a/src/internal/mana_c_api.h +++ b/src/internal/mana_c_api.h @@ -33,7 +33,7 @@ extern "C" size_t size_bytes; } mana_offset_array_t; -#define MANA_DEFINE_PLUGIN_INIT(name) void *name() +#define MANA_DEFINE_PLUGIN_INIT(name) void *name(int plugin_argc, const char **plugin_argv) #define MANA_DEFINE_PLUGIN_SHUTDOWN(name) void name(void *context) diff --git a/src/internal/mana_lib.hpp b/src/internal/mana_lib.hpp index 602ba1f..a5d8dee 100644 --- a/src/internal/mana_lib.hpp +++ b/src/internal/mana_lib.hpp @@ -5,6 +5,7 @@ #include "mana_c_api.h" #include #include +#include #include #include #include @@ -131,7 +132,7 @@ class IManaSink public: virtual ~IManaSink() = default; - virtual void init() = 0; + virtual void init(int plugin_argc, const char **plugin_argv) = 0; virtual void shutdown() = 0; virtual void begin_run(const char *descriptor_json) = 0; virtual void end_run(const char *descriptor_json) = 0; @@ -140,6 +141,14 @@ class IManaSink virtual void process_system_event(const uint32_t *data, size_t size) = 0; + template void init(StringHolder args) + { + std::vector cargs(args.size()); + std::transform(args.begin(), args.end(), cargs.begin(), + [](const std::string &s) { return s.c_str(); }); + init(cargs.size(), cargs.data()); + } + protected: IManaSink() = default; @@ -159,7 +168,10 @@ struct ManaCSink: public IManaSink { } - void init() override { context_ = plugin_.init(); } + void init(int plugin_argc, const char **plugin_argv) override + { + context_ = plugin_.init(plugin_argc, plugin_argv); + } void shutdown() override { plugin_.shutdown(context_); } void begin_run(const char *descriptor_json) override { diff --git a/src/tools/mana_auto_replay.cc b/src/tools/mana_auto_replay.cc index abc3cb3..ad72179 100644 --- a/src/tools/mana_auto_replay.cc +++ b/src/tools/mana_auto_replay.cc @@ -481,7 +481,7 @@ int main(int argc, char *argv[]) // make the analysis instance available to the parser callbacks parserContext->parser.userContext = &mana; - mana.sink->init(); + mana.sink->init(0, nullptr); mana.sink->begin_run(mana.runDescriptor.dump().c_str()); strategy->run(*listfileContext, *parserContext);