From: Philippe Proulx Date: Sat, 8 Dec 2018 20:47:12 +0000 (-0500) Subject: Plugin development API: use self enumeration and plugin types X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=a21d1cb8acfbed4d36ab6e74eefe64305d7587ef Plugin development API: use self enumeration and plugin types This is similar to a component class method accepting a self component object. The self plugin API is empty for the moment, but we might want to add functions which do not apply to plugin or const plugin objects later (for example, a function to set a self plugin's private data). Signed-off-by: Philippe Proulx --- diff --git a/include/babeltrace/plugin/plugin-dev.h b/include/babeltrace/plugin/plugin-dev.h index 21771ca9..1ddbf9d6 100644 --- a/include/babeltrace/plugin/plugin-dev.h +++ b/include/babeltrace/plugin/plugin-dev.h @@ -63,14 +63,16 @@ extern "C" { #define __BT_PLUGIN_VERSION_MINOR 0 /* Plugin initialization function type */ -enum bt_plugin_init_status { - BT_PLUGIN_INIT_STATUS_OK = 0, - BT_PLUGIN_INIT_STATUS_NOMEM = -12, - BT_PLUGIN_INIT_STATUS_ERROR = -1, +enum bt_self_plugin_status { + BT_SELF_PLUGIN_STATUS_OK = 0, + BT_SELF_PLUGIN_STATUS_NOMEM = -12, + BT_SELF_PLUGIN_STATUS_ERROR = -1, }; -typedef enum bt_plugin_init_status (*bt_plugin_init_func)( - const bt_plugin *plugin); +typedef struct bt_self_plugin bt_self_plugin; + +typedef enum bt_self_plugin_status (*bt_plugin_init_func)( + bt_self_plugin *plugin); /* Plugin exit function type */ typedef void (*bt_plugin_exit_func)(void); diff --git a/lib/plugin/plugin-so.c b/lib/plugin/plugin-so.c index a535d9d8..2f936a79 100644 --- a/lib/plugin/plugin-so.c +++ b/lib/plugin/plugin-so.c @@ -103,15 +103,15 @@ void fini_comp_class_list(void) } static inline -const char *bt_plugin_init_status_string(enum bt_plugin_init_status status) +const char *bt_self_plugin_status_string(enum bt_self_plugin_status status) { switch (status) { - case BT_PLUGIN_INIT_STATUS_OK: - return "BT_PLUGIN_INIT_STATUS_OK"; - case BT_PLUGIN_INIT_STATUS_ERROR: - return "BT_PLUGIN_INIT_STATUS_ERROR"; - case BT_PLUGIN_INIT_STATUS_NOMEM: - return "BT_PLUGIN_INIT_STATUS_NOMEM"; + case BT_SELF_PLUGIN_STATUS_OK: + return "BT_SELF_PLUGIN_STATUS_OK"; + case BT_SELF_PLUGIN_STATUS_ERROR: + return "BT_SELF_PLUGIN_STATUS_ERROR"; + case BT_SELF_PLUGIN_STATUS_NOMEM: + return "BT_SELF_PLUGIN_STATUS_NOMEM"; default: return "(unknown)"; } @@ -680,11 +680,12 @@ enum bt_plugin_status bt_plugin_so_init( /* Initialize plugin */ if (spec->init) { - enum bt_plugin_init_status init_status; + enum bt_self_plugin_status init_status; + BT_LOGD_STR("Calling user's plugin initialization function."); - init_status = spec->init(plugin); + init_status = spec->init((void *) plugin); BT_LOGD("User function returned: %s", - bt_plugin_init_status_string(init_status)); + bt_self_plugin_status_string(init_status)); if (init_status < 0) { BT_LOGW_STR("User's plugin initialization function failed."); diff --git a/tests/lib/test-plugin-plugins/minimal.c b/tests/lib/test-plugin-plugins/minimal.c index d6fa367e..eb89a7e5 100644 --- a/tests/lib/test-plugin-plugins/minimal.c +++ b/tests/lib/test-plugin-plugins/minimal.c @@ -19,10 +19,10 @@ #include #include -static enum bt_plugin_init_status plugin_init(const bt_plugin *plugin) +static enum bt_self_plugin_status plugin_init(bt_self_plugin *plugin) { g_setenv("BT_TEST_PLUGIN_INIT_CALLED", "1", 1); - return BT_PLUGIN_INIT_STATUS_OK; + return BT_SELF_PLUGIN_STATUS_OK; } static void plugin_exit(void)