diff options
Diffstat (limited to 'harness/src/plugin.c')
-rw-r--r-- | harness/src/plugin.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/harness/src/plugin.c b/harness/src/plugin.c index f1cc361..1d7c992 100644 --- a/harness/src/plugin.c +++ b/harness/src/plugin.c @@ -86,11 +86,29 @@ void do_request_log(void *plugv, const char* str) size_t n = plugin->n_requested_actions++; if (n < 8) { plugin->requested_actions[n].action = plugin_do_log; - plugin->requested_actions[n].arg = strdup(str); + plugin->requested_actions[n].str_arg = strdup(str); plugin->requested_actions[n].arg_dtor = free; } } +static int plugin_do_exit(void* plugv, int ec) +{ + exit(ec); + return 0; +} + +void do_request_exit(void *plugv, int ec) +{ + plugin_t *plugin = plugv; + + size_t n = plugin->n_requested_actions++; + if (n < 8) { + plugin->requested_actions[n].action = (int(*)(plugin_t*,void*)) plugin_do_exit; + plugin->requested_actions[n].int_arg = ec; + plugin->requested_actions[n].arg_dtor = NULL; + } +} + static int load_plugin_from_file_(int argc, char **argv, const char *filename, plugin_t *plugin) { @@ -117,6 +135,7 @@ static int load_plugin_from_file_(int argc, char **argv, const char *filename, plugin->foreign_intf.ctx = plugin; plugin->foreign_intf.request_hot_reload = do_request_hot_reload; plugin->foreign_intf.do_log = do_request_log; + plugin->foreign_intf.request_exit = do_request_exit; plugin->plugin_load(plugin->argc, plugin->argv, &plugin->foreign_intf); end: @@ -206,9 +225,9 @@ void plugin_run_requested_actions(plugin_t *plugin) size_t i; for (i = 0; i < n_requested_actions; ++i) { - requested_actions[i].action(plugin, requested_actions[i].arg); + requested_actions[i].action(plugin, requested_actions[i].str_arg); if (requested_actions[i].arg_dtor) { - requested_actions[i].arg_dtor(requested_actions[i].arg); + requested_actions[i].arg_dtor(requested_actions[i].ptr_arg); } } } |