X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fplugin%2Fplugin.c;h=9f0bc2ac22efdba4f4299e89690de6575b6224a1;hb=a12f3d624772f543137e60252101871cd6017a06;hp=70e99e4f033d7fd018c25e1efa546f48e7c3c55c;hpb=398454ed067b95215c7affbe265fd36edab931ee;p=babeltrace.git diff --git a/lib/plugin/plugin.c b/lib/plugin/plugin.c index 70e99e4f..9f0bc2ac 100644 --- a/lib/plugin/plugin.c +++ b/lib/plugin/plugin.c @@ -1,6 +1,6 @@ /* + * Copyright 2017-2018 Philippe Proulx * Copyright 2016 Jérémie Galarneau - * Copyright 2017 Philippe Proulx * * Author: Jérémie Galarneau * @@ -26,17 +26,17 @@ #define BT_LOG_TAG "PLUGIN" #include +#include +#include #include #include -#include #include #include #include -#include +#include +#include #include #include -#include -#include #include #include #include @@ -46,7 +46,7 @@ #include #include -#define PYTHON_PLUGIN_PROVIDER_FILENAME "libbabeltrace-python-plugin-provider." G_MODULE_SUFFIX +#define PYTHON_PLUGIN_PROVIDER_FILENAME "libbabeltrace2-python-plugin-provider." G_MODULE_SUFFIX #define PYTHON_PLUGIN_PROVIDER_SYM_NAME bt_plugin_python_create_all_from_file #define PYTHON_PLUGIN_PROVIDER_SYM_NAME_STR TOSTRING(PYTHON_PLUGIN_PROVIDER_SYM_NAME) @@ -116,22 +116,21 @@ uint64_t bt_plugin_set_get_plugin_count(struct bt_plugin_set *plugin_set) return (uint64_t) plugin_set->plugins->len; } -struct bt_plugin *bt_plugin_set_borrow_plugin_by_index( - struct bt_plugin_set *plugin_set, - uint64_t index) +const struct bt_plugin *bt_plugin_set_borrow_plugin_by_index_const( + const struct bt_plugin_set *plugin_set, uint64_t index) { BT_ASSERT_PRE_NON_NULL(plugin_set, "Plugin set"); BT_ASSERT_PRE_VALID_INDEX(index, plugin_set->plugins->len); return g_ptr_array_index(plugin_set->plugins, index); } -struct bt_plugin_set *bt_plugin_create_all_from_static(void) +const struct bt_plugin_set *bt_plugin_find_all_from_static(void) { /* bt_plugin_so_create_all_from_static() logs errors */ return bt_plugin_so_create_all_from_static(); } -struct bt_plugin_set *bt_plugin_create_all_from_file(const char *path) +const struct bt_plugin_set *bt_plugin_find_all_from_file(const char *path) { struct bt_plugin_set *plugin_set = NULL; @@ -171,13 +170,13 @@ static void destroy_gstring(void *data) g_string_free(data, TRUE); } -struct bt_plugin *bt_plugin_find(const char *plugin_name) +const struct bt_plugin *bt_plugin_find(const char *plugin_name) { const char *system_plugin_dir; char *home_plugin_dir = NULL; const char *envvar; - struct bt_plugin *plugin = NULL; - struct bt_plugin_set *plugin_set = NULL; + const struct bt_plugin *plugin = NULL; + const struct bt_plugin_set *plugin_set = NULL; GPtrArray *dirs = NULL; int ret; size_t i, j; @@ -247,7 +246,7 @@ struct bt_plugin *bt_plugin_find(const char *plugin_name) /* * Skip this if the directory does not exist because - * bt_plugin_create_all_from_dir() would log a warning. + * bt_plugin_find_all_from_dir() would log a warning. */ if (!g_file_test(dir->str, G_FILE_TEST_IS_DIR)) { BT_LOGV("Skipping nonexistent directory path: " @@ -255,8 +254,8 @@ struct bt_plugin *bt_plugin_find(const char *plugin_name) continue; } - /* bt_plugin_create_all_from_dir() logs details/errors */ - plugin_set = bt_plugin_create_all_from_dir(dir->str, BT_FALSE); + /* bt_plugin_find_all_from_dir() logs details/errors */ + plugin_set = bt_plugin_find_all_from_dir(dir->str, BT_FALSE); if (!plugin_set) { BT_LOGD("No plugins found in directory: path=\"%s\"", dir->str); @@ -264,7 +263,7 @@ struct bt_plugin *bt_plugin_find(const char *plugin_name) } for (j = 0; j < plugin_set->plugins->len; j++) { - struct bt_plugin *candidate_plugin = + const struct bt_plugin *candidate_plugin = g_ptr_array_index(plugin_set->plugins, j); if (strcmp(bt_plugin_get_name(candidate_plugin), @@ -282,10 +281,10 @@ struct bt_plugin *bt_plugin_find(const char *plugin_name) } bt_object_put_ref(plugin_set); - plugin_set = bt_plugin_create_all_from_static(); + plugin_set = bt_plugin_find_all_from_static(); if (plugin_set) { for (j = 0; j < plugin_set->plugins->len; j++) { - struct bt_plugin *candidate_plugin = + const struct bt_plugin *candidate_plugin = g_ptr_array_index(plugin_set->plugins, j); if (strcmp(bt_plugin_get_name(candidate_plugin), @@ -341,7 +340,7 @@ int nftw_append_all_from_dir(const char *file, const struct stat *sb, int flag, switch (flag) { case FTW_F: { - struct bt_plugin_set *plugins_from_file; + const struct bt_plugin_set *plugins_from_file; if (name[0] == '.') { /* Skip hidden files */ @@ -349,7 +348,7 @@ int nftw_append_all_from_dir(const char *file, const struct stat *sb, int flag, goto end; } - plugins_from_file = bt_plugin_create_all_from_file(file); + plugins_from_file = bt_plugin_find_all_from_file(file); if (plugins_from_file) { size_t j; @@ -361,7 +360,9 @@ int nftw_append_all_from_dir(const char *file, const struct stat *sb, int flag, BT_LIB_LOGD("Adding plugin to plugin set: " "plugin-path=\"%s\", %![plugin-]+l", file, plugin); - bt_plugin_set_add_plugin(append_all_from_dir_info.plugin_set, plugin); + bt_plugin_set_add_plugin( + append_all_from_dir_info.plugin_set, + plugin); } bt_object_put_ref(plugins_from_file); @@ -407,7 +408,7 @@ enum bt_plugin_status bt_plugin_create_append_all_from_dir( return ret; } -struct bt_plugin_set *bt_plugin_create_all_from_dir(const char *path, +const struct bt_plugin_set *bt_plugin_find_all_from_dir(const char *path, bt_bool recurse) { struct bt_plugin_set *plugin_set; @@ -442,38 +443,38 @@ end: return plugin_set; } -const char *bt_plugin_get_name(struct bt_plugin *plugin) +const char *bt_plugin_get_name(const struct bt_plugin *plugin) { BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); return plugin->info.name_set ? plugin->info.name->str : NULL; } -const char *bt_plugin_get_author(struct bt_plugin *plugin) +const char *bt_plugin_get_author(const struct bt_plugin *plugin) { BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); return plugin->info.author_set ? plugin->info.author->str : NULL; } -const char *bt_plugin_get_license(struct bt_plugin *plugin) +const char *bt_plugin_get_license(const struct bt_plugin *plugin) { BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); return plugin->info.license_set ? plugin->info.license->str : NULL; } -const char *bt_plugin_get_path(struct bt_plugin *plugin) +const char *bt_plugin_get_path(const struct bt_plugin *plugin) { BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); return plugin->info.path_set ? plugin->info.path->str : NULL; } -const char *bt_plugin_get_description(struct bt_plugin *plugin) +const char *bt_plugin_get_description(const struct bt_plugin *plugin) { BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); return plugin->info.description_set ? plugin->info.description->str : NULL; } -enum bt_property_availability bt_plugin_get_version(struct bt_plugin *plugin, +enum bt_property_availability bt_plugin_get_version(const struct bt_plugin *plugin, unsigned int *major, unsigned int *minor, unsigned int *patch, const char **extra) { @@ -508,19 +509,19 @@ end: return avail; } -uint64_t bt_plugin_get_source_component_class_count(struct bt_plugin *plugin) +uint64_t bt_plugin_get_source_component_class_count(const struct bt_plugin *plugin) { BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); return (uint64_t) plugin->src_comp_classes->len; } -uint64_t bt_plugin_get_filter_component_class_count(struct bt_plugin *plugin) +uint64_t bt_plugin_get_filter_component_class_count(const struct bt_plugin *plugin) { BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); return (uint64_t) plugin->flt_comp_classes->len; } -uint64_t bt_plugin_get_sink_component_class_count(struct bt_plugin *plugin) +uint64_t bt_plugin_get_sink_component_class_count(const struct bt_plugin *plugin) { BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); return (uint64_t) plugin->sink_comp_classes->len; @@ -528,7 +529,7 @@ uint64_t bt_plugin_get_sink_component_class_count(struct bt_plugin *plugin) static inline struct bt_component_class *borrow_component_class_by_index( - struct bt_plugin *plugin, GPtrArray *comp_classes, + const struct bt_plugin *plugin, GPtrArray *comp_classes, uint64_t index) { BT_ASSERT_PRE_NON_NULL(plugin, "Plugin"); @@ -536,34 +537,33 @@ struct bt_component_class *borrow_component_class_by_index( return g_ptr_array_index(comp_classes, index); } - -struct bt_component_class_source * -bt_plugin_borrow_source_component_class_by_index( - struct bt_plugin *plugin, uint64_t index) +const struct bt_component_class_source * +bt_plugin_borrow_source_component_class_by_index_const( + const struct bt_plugin *plugin, uint64_t index) { - return (void *) borrow_component_class_by_index(plugin, + return (const void *) borrow_component_class_by_index(plugin, plugin->src_comp_classes, index); } -struct bt_component_class_filter * -bt_plugin_borrow_filter_component_class_by_index( - struct bt_plugin *plugin, uint64_t index) +const struct bt_component_class_filter * +bt_plugin_borrow_filter_component_class_by_index_const( + const struct bt_plugin *plugin, uint64_t index) { - return (void *) borrow_component_class_by_index(plugin, + return (const void *) borrow_component_class_by_index(plugin, plugin->flt_comp_classes, index); } -struct bt_component_class_sink * -bt_plugin_borrow_sink_component_class_by_index( - struct bt_plugin *plugin, uint64_t index) +const struct bt_component_class_sink * +bt_plugin_borrow_sink_component_class_by_index_const( + const struct bt_plugin *plugin, uint64_t index) { - return (void *) borrow_component_class_by_index(plugin, + return (const void *) borrow_component_class_by_index(plugin, plugin->sink_comp_classes, index); } static inline struct bt_component_class *borrow_component_class_by_name( - struct bt_plugin *plugin, GPtrArray *comp_classes, + const struct bt_plugin *plugin, GPtrArray *comp_classes, const char *name) { struct bt_component_class *comp_class = NULL; @@ -589,26 +589,46 @@ struct bt_component_class *borrow_component_class_by_name( return comp_class; } -struct bt_component_class_source * -bt_plugin_borrow_source_component_class_by_name(struct bt_plugin *plugin, - const char *name) +const struct bt_component_class_source * +bt_plugin_borrow_source_component_class_by_name_const( + const struct bt_plugin *plugin, const char *name) { - return (void *) borrow_component_class_by_name(plugin, + return (const void *) borrow_component_class_by_name(plugin, plugin->src_comp_classes, name); } -struct bt_component_class_filter * -bt_plugin_borrow_filter_component_class_by_name(struct bt_plugin *plugin, - const char *name) +const struct bt_component_class_filter * +bt_plugin_borrow_filter_component_class_by_name_const( + const struct bt_plugin *plugin, const char *name) { - return (void *) borrow_component_class_by_name(plugin, + return (const void *) borrow_component_class_by_name(plugin, plugin->flt_comp_classes, name); } -struct bt_component_class_sink * -bt_plugin_borrow_sink_component_class_by_name(struct bt_plugin *plugin, - const char *name) +const struct bt_component_class_sink * +bt_plugin_borrow_sink_component_class_by_name_const( + const struct bt_plugin *plugin, const char *name) { - return (void *) borrow_component_class_by_name(plugin, + return (const void *) borrow_component_class_by_name(plugin, plugin->sink_comp_classes, name); } + +void bt_plugin_get_ref(const struct bt_plugin *plugin) +{ + bt_object_get_ref(plugin); +} + +void bt_plugin_put_ref(const struct bt_plugin *plugin) +{ + bt_object_put_ref(plugin); +} + +void bt_plugin_set_get_ref(const struct bt_plugin_set *plugin_set) +{ + bt_object_get_ref(plugin_set); +} + +void bt_plugin_set_put_ref(const struct bt_plugin_set *plugin_set) +{ + bt_object_put_ref(plugin_set); +}