/*
+ * SPDX-License-Identifier: MIT
+ *
* Copyright 2017-2018 Philippe Proulx <pproulx@efficios.com>
* Copyright 2016 Jérémie Galarneau <jeremie.galarneau@efficios.com>
- *
- * Author: Jérémie Galarneau <jeremie.galarneau@efficios.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
*/
#define BT_LOG_TAG "LIB/PLUGIN"
#include "common/macros.h"
#include "compat/compiler.h"
#include "common/common.h"
-#include <babeltrace2/plugin/plugin-const.h>
-#include <babeltrace2/graph/component-class-const.h>
-#include <babeltrace2/current-thread.h>
+#include <babeltrace2/plugin/plugin-loading.h>
+#include <babeltrace2/graph/component-class.h>
+#include <babeltrace2/error-reporting.h>
#include "lib/graph/component-class.h"
#include <babeltrace2/types.h>
#include <glib.h>
#include <unistd.h>
+#include <stdbool.h>
#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>
#define APPEND_ALL_FROM_DIR_NFDOPEN_MAX 8
+/* Declare here to make sure definition in both ifdef branches are in sync. */
+static
+int init_python_plugin_provider(void);
+typedef int (*create_all_from_file_sym_type)(
+ const char *path,
+ bool fail_on_load_error,
+ struct bt_plugin_set **plugin_set_out);
+
#ifdef BT_BUILT_IN_PYTHON_PLUGIN_SUPPORT
#include <plugin/python-plugin-provider.h>
static
-int (*bt_plugin_python_create_all_from_file_sym)(
- const char *path, bool fail_on_load_error,
- struct bt_plugin_set **plugin_set_out) =
- bt_plugin_python_create_all_from_file;
+create_all_from_file_sym_type
+ bt_plugin_python_create_all_from_file_sym =
+ bt_plugin_python_create_all_from_file;
static
-enum bt_plugin_status init_python_plugin_provider(void)
+int init_python_plugin_provider(void)
{
}
#else /* BT_BUILT_IN_PYTHON_PLUGIN_SUPPORT */
static GModule *python_plugin_provider_module;
static
-int (*bt_plugin_python_create_all_from_file_sym)(
- const char *path, bool fail_on_load_error,
- struct bt_plugin_set **plugin_set_out);
+create_all_from_file_sym_type bt_plugin_python_create_all_from_file_sym;
static
int init_python_plugin_provider(void) {
bt_bool fail_on_load_error,
const struct bt_plugin_set **plugin_set_out)
{
+ BT_ASSERT_PRE_NO_ERROR();
+
/* bt_plugin_so_create_all_from_static() logs errors */
return bt_plugin_so_create_all_from_static(fail_on_load_error,
(void *) plugin_set_out);
{
enum bt_plugin_find_all_from_file_status status;
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_NON_NULL(path, "Path");
BT_ASSERT_PRE_NON_NULL(path, "Plugin set (output)");
BT_LOGI("Creating plugins from file: path=\"%s\"", path);
int status = BT_FUNC_STATUS_OK;
uint64_t dir_i, plugin_i;
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_NON_NULL(plugin_set_out, "Plugin set (output)");
BT_LOGI("Finding all plugins in standard directories and built-in plugins: "
"find-in-std-env-var=%d, find-in-user-dir=%d, "
const struct bt_plugin_set *plugin_set = NULL;
uint64_t i;
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_NON_NULL(plugin_name, "Name");
BT_ASSERT_PRE_NON_NULL(plugin_out, "Plugin (output)");
BT_LOGI("Finding named plugin in standard directories and built-in plugins: "
find_in_sys_dir, find_in_static, fail_on_load_error,
&plugin_set);
if (status != BT_FUNC_STATUS_OK) {
+ BT_ASSERT(!plugin_set);
goto end;
}
if (strcmp(plugin->info.name->str, plugin_name) == 0) {
*plugin_out = plugin;
- bt_object_get_no_null_check(*plugin_out);
+ bt_object_get_ref_no_null_check(*plugin_out);
goto end;
}
}
"name=\"%s\"", plugin_name);
}
+ bt_plugin_set_put_ref(plugin_set);
+
return status;
}
": path=\"%s\", recurse=%d",
path, recurse);
(void) BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(
- "Babeltrace library",
+ BT_LIB_LOG_LIBBABELTRACE2_NAME,
"Cannot open directory: path=\"%s\", recurse=%d",
path, recurse);
status = BT_FUNC_STATUS_ERROR;
enum bt_plugin_find_all_from_dir_status status =
BT_FUNC_STATUS_OK;
+ BT_ASSERT_PRE_NO_ERROR();
BT_ASSERT_PRE_NON_NULL(plugin_set_out, "Plugin set (output)");
BT_LOGI("Creating all plugins in directory: path=\"%s\", recurse=%d",
path, recurse);
const char *comp_class_cand_name =
bt_component_class_get_name(comp_class_candidate);
- BT_ASSERT(comp_class_cand_name);
+ BT_ASSERT_DBG(comp_class_cand_name);
if (strcmp(name, comp_class_cand_name) == 0) {
comp_class = comp_class_candidate;