Plugin development API: use self enumeration and plugin types
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Sat, 8 Dec 2018 20:47:12 +0000 (15:47 -0500)
committerFrancis Deslauriers <francis.deslauriers@efficios.com>
Thu, 2 May 2019 20:50:15 +0000 (20:50 +0000)
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 <eeppeliteloop@gmail.com>
include/babeltrace/plugin/plugin-dev.h
lib/plugin/plugin-so.c
tests/lib/test-plugin-plugins/minimal.c

index 21771ca981a9f224252c5ee42d8894f02fe12aa1..1ddbf9d6fffbafa1ccf7d00e779509322fa96c9f 100644 (file)
@@ -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);
index a535d9d877ec98cbe844992173f9492d7036e78f..2f936a79f8ec8e4fed7fed058028b21dc3d3a249 100644 (file)
@@ -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.");
index d6fa367e2e41c696f5faa8965159e437df620256..eb89a7e5ec4f05030b8b890dae6a467f5e781ed9 100644 (file)
 #include <stdlib.h>
 #include <glib.h>
 
-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)
This page took 0.029157 seconds and 4 git commands to generate.