X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcli%2Fbabeltrace2-cfg-cli-args.c;h=fa1c1f54ee3ffb908e755ac31c258fce7a6e7dd8;hb=9412c5561f37f5c11aa0784b4714f574c1aade83;hp=546bdbe28ab33fd14471b32a7275efce063eb2cb;hpb=847ab606a7c62eccf63c86e4030a667e57d5b3e8;p=babeltrace.git diff --git a/src/cli/babeltrace2-cfg-cli-args.c b/src/cli/babeltrace2-cfg-cli-args.c index 546bdbe2..fa1c1f54 100644 --- a/src/cli/babeltrace2-cfg-cli-args.c +++ b/src/cli/babeltrace2-cfg-cli-args.c @@ -41,13 +41,12 @@ #include "babeltrace2-cfg-cli-args.h" #include "babeltrace2-cfg-cli-args-connect.h" #include "babeltrace2-cfg-cli-params-arg.h" +#include "babeltrace2-log-level.h" #include "babeltrace2-plugins.h" #include "babeltrace2-query.h" #include "autodisc/autodisc.h" #include "common/version.h" -static const int cli_default_log_level = BT_LOG_WARNING; - /* INI-style parsing FSM states */ enum ini_parsing_fsm_state { /* Expect a map key (identifier) */ @@ -1033,17 +1032,9 @@ error: return -1; } -static -int append_home_and_system_plugin_paths_cfg(struct bt_config *cfg) -{ - return append_home_and_system_plugin_paths(cfg->plugin_paths, - cfg->omit_system_plugin_path, cfg->omit_home_plugin_path); -} - static struct bt_config *bt_config_base_create(enum bt_config_command command, - const bt_value *initial_plugin_paths, - bool needs_plugins) + const bt_value *plugin_paths, bool needs_plugins) { struct bt_config *cfg; @@ -1058,12 +1049,12 @@ struct bt_config *bt_config_base_create(enum bt_config_command command, cfg->command = command; cfg->command_needs_plugins = needs_plugins; - if (initial_plugin_paths) { - bt_value *initial_plugin_paths_copy; + if (plugin_paths) { + bt_value *plugin_paths_copy; - (void) bt_value_copy(initial_plugin_paths, - &initial_plugin_paths_copy); - cfg->plugin_paths = initial_plugin_paths_copy; + (void) bt_value_copy(plugin_paths, + &plugin_paths_copy); + cfg->plugin_paths = plugin_paths_copy; } else { cfg->plugin_paths = bt_value_array_create(); if (!cfg->plugin_paths) { @@ -1082,14 +1073,13 @@ end: } static -struct bt_config *bt_config_run_create( - const bt_value *initial_plugin_paths) +struct bt_config *bt_config_run_create(const bt_value *plugin_paths) { struct bt_config *cfg; /* Create config */ cfg = bt_config_base_create(BT_CONFIG_COMMAND_RUN, - initial_plugin_paths, true); + plugin_paths, true); if (!cfg) { goto error; } @@ -1132,37 +1122,21 @@ end: } static -struct bt_config *bt_config_list_plugins_create( - const bt_value *initial_plugin_paths) +struct bt_config *bt_config_list_plugins_create(const bt_value *plugin_paths) { - struct bt_config *cfg; - - /* Create config */ - cfg = bt_config_base_create(BT_CONFIG_COMMAND_LIST_PLUGINS, - initial_plugin_paths, true); - if (!cfg) { - goto error; - } - - goto end; - -error: - BT_OBJECT_PUT_REF_AND_RESET(cfg); - -end: - return cfg; + return bt_config_base_create(BT_CONFIG_COMMAND_LIST_PLUGINS, + plugin_paths, true); } static -struct bt_config *bt_config_help_create( - const bt_value *initial_plugin_paths, +struct bt_config *bt_config_help_create(const bt_value *plugin_paths, int default_log_level) { struct bt_config *cfg; /* Create config */ cfg = bt_config_base_create(BT_CONFIG_COMMAND_HELP, - initial_plugin_paths, true); + plugin_paths, true); if (!cfg) { goto error; } @@ -1183,14 +1157,13 @@ end: } static -struct bt_config *bt_config_query_create( - const bt_value *initial_plugin_paths) +struct bt_config *bt_config_query_create(const bt_value *plugin_paths) { struct bt_config *cfg; /* Create config */ cfg = bt_config_base_create(BT_CONFIG_COMMAND_QUERY, - initial_plugin_paths, true); + plugin_paths, true); if (!cfg) { goto error; } @@ -1212,13 +1185,13 @@ end: static struct bt_config *bt_config_print_ctf_metadata_create( - const bt_value *initial_plugin_paths) + const bt_value *plugin_paths) { struct bt_config *cfg; /* Create config */ cfg = bt_config_base_create(BT_CONFIG_COMMAND_PRINT_CTF_METADATA, - initial_plugin_paths, true); + plugin_paths, true); if (!cfg) { goto error; } @@ -1246,13 +1219,13 @@ end: static struct bt_config *bt_config_print_lttng_live_sessions_create( - const bt_value *initial_plugin_paths) + const bt_value *plugin_paths) { struct bt_config *cfg; /* Create config */ cfg = bt_config_base_create(BT_CONFIG_COMMAND_PRINT_LTTNG_LIVE_SESSIONS, - initial_plugin_paths, true); + plugin_paths, true); if (!cfg) { goto error; } @@ -1327,6 +1300,8 @@ void print_expected_params_format(FILE *fp) fprintf(fp, "* Double-quoted string (accepts escape characters).\n"); fprintf(fp, "* Array, formatted as an opening `[`, a list of comma-separated values\n"); fprintf(fp, " (as described by the current list) and a closing `]`.\n"); + fprintf(fp, "* Map, formatted as an opening `{`, a comma-separated list of PARAM=VALUE\n"); + fprintf(fp, " assignments and a closing `}`.\n"); fprintf(fp, "\n"); fprintf(fp, "You can put whitespaces allowed around individual `=` and `,` symbols.\n"); fprintf(fp, "\n"); @@ -1378,12 +1353,7 @@ void print_help_usage(FILE *fp) fprintf(fp, "\n"); fprintf(fp, "Options:\n"); fprintf(fp, "\n"); - fprintf(fp, " --omit-home-plugin-path Omit home plugins from plugin search path\n"); - fprintf(fp, " (~/.local/lib/babeltrace2/plugins)\n"); - fprintf(fp, " --omit-system-plugin-path Omit system plugins from plugin search path\n"); - fprintf(fp, " --plugin-path=PATH[:PATH]... Add PATH to the list of paths from which\n"); - fprintf(fp, " dynamic plugins can be loaded\n"); - fprintf(fp, " -h, --help Show this help and quit\n"); + fprintf(fp, " -h, --help Show this help and quit\n"); fprintf(fp, "\n"); fprintf(fp, "See `babeltrace2 --help` for the list of general options.\n"); fprintf(fp, "\n"); @@ -1394,9 +1364,6 @@ static const struct bt_argpar_opt_descr help_options[] = { /* id, short_name, long_name, with_arg */ { OPT_HELP, 'h', "help", false }, - { OPT_OMIT_HOME_PLUGIN_PATH, '\0', "omit-home-plugin-path", false }, - { OPT_OMIT_SYSTEM_PLUGIN_PATH, '\0', "omit-system-plugin-path", false }, - { OPT_PLUGIN_PATH, '\0', "plugin-path", true }, BT_ARGPAR_OPT_DESCR_SENTINEL }; @@ -1408,29 +1375,20 @@ const struct bt_argpar_opt_descr help_options[] = { */ static struct bt_config *bt_config_help_from_args(int argc, const char *argv[], - int *retcode, bool force_omit_system_plugin_path, - bool force_omit_home_plugin_path, - const bt_value *initial_plugin_paths, int default_log_level) + int *retcode, const bt_value *plugin_paths, + int default_log_level) { - int ret, i; struct bt_config *cfg = NULL; - const char *non_opt = NULL; char *plugin_name = NULL, *comp_cls_name = NULL; struct bt_argpar_parse_ret argpar_parse_ret = { 0 }; + struct bt_argpar_item_non_opt *non_opt; *retcode = 0; - cfg = bt_config_help_create(initial_plugin_paths, default_log_level); + cfg = bt_config_help_create(plugin_paths, default_log_level); if (!cfg) { goto error; } - cfg->omit_system_plugin_path = force_omit_system_plugin_path; - cfg->omit_home_plugin_path = force_omit_home_plugin_path; - ret = append_env_var_plugin_paths(cfg->plugin_paths); - if (ret) { - goto error; - } - /* Parse options */ argpar_parse_ret = bt_argpar_parse(argc, argv, help_options, true); if (argpar_parse_ret.error) { @@ -1447,75 +1405,36 @@ struct bt_config *bt_config_help_from_args(int argc, const char *argv[], goto end; } - for (i = 0; i < argpar_parse_ret.items->len; i++) { - struct bt_argpar_item *argpar_item = - g_ptr_array_index(argpar_parse_ret.items, i); - - if (argpar_item->type == BT_ARGPAR_ITEM_TYPE_OPT) { - struct bt_argpar_item_opt *argpar_item_opt; - const char *arg; - argpar_item_opt = (struct bt_argpar_item_opt *) argpar_item; - arg = argpar_item_opt->arg; - - switch (argpar_item_opt->descr->id) { - case OPT_PLUGIN_PATH: - if (bt_config_append_plugin_paths_check_setuid_setgid( - cfg->plugin_paths, arg)) { - goto error; - } - break; - case OPT_OMIT_SYSTEM_PLUGIN_PATH: - cfg->omit_system_plugin_path = true; - break; - case OPT_OMIT_HOME_PLUGIN_PATH: - cfg->omit_home_plugin_path = true; - break; - default: - BT_CLI_LOGE_APPEND_CAUSE("Unknown command-line option specified (option code %d).", - argpar_item_opt->descr->id); - goto error; - } - } else { - struct bt_argpar_item_non_opt *argpar_item_non_opt - = (struct bt_argpar_item_non_opt *) argpar_item; - - if (non_opt) { - BT_CLI_LOGE_APPEND_CAUSE("Extraneous command-line argument specified to `help` command: `%s`.", - argpar_item_non_opt->arg); - goto error; - } - - non_opt = argpar_item_non_opt->arg; - } + if (argpar_parse_ret.items->len == 0) { + BT_CLI_LOGE_APPEND_CAUSE( + "Missing plugin name or component class descriptor."); + goto error; + } else if (argpar_parse_ret.items->len > 1) { + /* + * At this point we know there are least two non-option + * arguments because we don't reach here with `--help`, + * the only option. + */ + non_opt = argpar_parse_ret.items->pdata[1]; + BT_CLI_LOGE_APPEND_CAUSE( + "Extraneous command-line argument specified to `help` command: `%s`.", + non_opt->arg); + goto error; } - if (non_opt) { - plugin_comp_cls_names(non_opt, NULL, - &plugin_name, &comp_cls_name, - &cfg->cmd_data.help.cfg_component->type); - if (plugin_name && comp_cls_name) { - /* Component class help */ - g_string_assign( - cfg->cmd_data.help.cfg_component->plugin_name, - plugin_name); - g_string_assign( - cfg->cmd_data.help.cfg_component->comp_cls_name, - comp_cls_name); - } else { - /* Fall back to plugin help */ - g_string_assign( - cfg->cmd_data.help.cfg_component->plugin_name, - non_opt); - } + non_opt = argpar_parse_ret.items->pdata[0]; + plugin_comp_cls_names(non_opt->arg, NULL, &plugin_name, &comp_cls_name, + &cfg->cmd_data.help.cfg_component->type); + if (plugin_name && comp_cls_name) { + /* Component class help */ + g_string_assign(cfg->cmd_data.help.cfg_component->plugin_name, + plugin_name); + g_string_assign(cfg->cmd_data.help.cfg_component->comp_cls_name, + comp_cls_name); } else { - print_help_usage(stdout); - *retcode = -1; - BT_OBJECT_PUT_REF_AND_RESET(cfg); - goto end; - } - - if (append_home_and_system_plugin_paths_cfg(cfg)) { - goto error; + /* Fall back to plugin help */ + g_string_assign(cfg->cmd_data.help.cfg_component->plugin_name, + non_opt->arg); } goto end; @@ -1543,14 +1462,9 @@ void print_query_usage(FILE *fp) fprintf(fp, "\n"); fprintf(fp, "Options:\n"); fprintf(fp, "\n"); - fprintf(fp, " --omit-home-plugin-path Omit home plugins from plugin search path\n"); - fprintf(fp, " (~/.local/lib/babeltrace2/plugins)\n"); - fprintf(fp, " --omit-system-plugin-path Omit system plugins from plugin search path\n"); - fprintf(fp, " -p, --params=PARAMS Set the query parameters to PARAMS\n"); - fprintf(fp, " (see the expected format of PARAMS below)\n"); - fprintf(fp, " --plugin-path=PATH[:PATH]... Add PATH to the list of paths from which\n"); - fprintf(fp, " dynamic plugins can be loaded\n"); - fprintf(fp, " -h, --help Show this help and quit\n"); + fprintf(fp, " -p, --params=PARAMS Set the query parameters to PARAMS (see the expected\n"); + fprintf(fp, " format of PARAMS below)\n"); + fprintf(fp, " -h, --help Show this help and quit\n"); fprintf(fp, "\n\n"); print_expected_params_format(fp); } @@ -1559,10 +1473,7 @@ static const struct bt_argpar_opt_descr query_options[] = { /* id, short_name, long_name, with_arg */ { OPT_HELP, 'h', "help", false }, - { OPT_OMIT_HOME_PLUGIN_PATH, '\0', "omit-home-plugin-path", false }, - { OPT_OMIT_SYSTEM_PLUGIN_PATH, '\0', "omit-system-plugin-path", false }, { OPT_PARAMS, 'p', "params", true }, - { OPT_PLUGIN_PATH, '\0', "plugin-path", true }, BT_ARGPAR_OPT_DESCR_SENTINEL }; @@ -1574,12 +1485,10 @@ const struct bt_argpar_opt_descr query_options[] = { */ static struct bt_config *bt_config_query_from_args(int argc, const char *argv[], - int *retcode, bool force_omit_system_plugin_path, - bool force_omit_home_plugin_path, - const bt_value *initial_plugin_paths, + int *retcode, const bt_value *plugin_paths, int default_log_level) { - int ret, i; + int i; struct bt_config *cfg = NULL; const char *component_class_spec = NULL; const char *query_object = NULL; @@ -1591,7 +1500,7 @@ struct bt_config *bt_config_query_from_args(int argc, const char *argv[], bt_value_get_ref(bt_value_null); *retcode = 0; - cfg = bt_config_query_create(initial_plugin_paths); + cfg = bt_config_query_create(plugin_paths); if (!cfg) { goto error; } @@ -1602,13 +1511,6 @@ struct bt_config *bt_config_query_from_args(int argc, const char *argv[], goto error; } - cfg->omit_system_plugin_path = force_omit_system_plugin_path; - cfg->omit_home_plugin_path = force_omit_home_plugin_path; - ret = append_env_var_plugin_paths(cfg->plugin_paths); - if (ret) { - goto error; - } - /* Parse options */ argpar_parse_ret = bt_argpar_parse(argc, argv, query_options, true); if (argpar_parse_ret.error) { @@ -1635,18 +1537,6 @@ struct bt_config *bt_config_query_from_args(int argc, const char *argv[], const char *arg = argpar_item_opt->arg; switch (argpar_item_opt->descr->id) { - case OPT_PLUGIN_PATH: - if (bt_config_append_plugin_paths_check_setuid_setgid( - cfg->plugin_paths, arg)) { - goto error; - } - break; - case OPT_OMIT_SYSTEM_PLUGIN_PATH: - cfg->omit_system_plugin_path = true; - break; - case OPT_OMIT_HOME_PLUGIN_PATH: - cfg->omit_home_plugin_path = true; - break; case OPT_PARAMS: { bt_value_put_ref(params); @@ -1709,11 +1599,6 @@ struct bt_config *bt_config_query_from_args(int argc, const char *argv[], } g_string_assign(cfg->cmd_data.query.object, query_object); - - if (append_home_and_system_plugin_paths_cfg(cfg)) { - goto error; - } - goto end; error: @@ -1741,11 +1626,6 @@ void print_list_plugins_usage(FILE *fp) fprintf(fp, "\n"); fprintf(fp, "Options:\n"); fprintf(fp, "\n"); - fprintf(fp, " --omit-home-plugin-path Omit home plugins from plugin search path\n"); - fprintf(fp, " (~/.local/lib/babeltrace2/plugins)\n"); - fprintf(fp, " --omit-system-plugin-path Omit system plugins from plugin search path\n"); - fprintf(fp, " --plugin-path=PATH[:PATH]... Add PATH to the list of paths from which\n"); - fprintf(fp, " dynamic plugins can be loaded\n"); fprintf(fp, " -h, --help Show this help and quit\n"); fprintf(fp, "\n"); fprintf(fp, "See `babeltrace2 --help` for the list of general options.\n"); @@ -1757,9 +1637,6 @@ static const struct bt_argpar_opt_descr list_plugins_options[] = { /* id, short_name, long_name, with_arg */ { OPT_HELP, 'h', "help", false }, - { OPT_OMIT_HOME_PLUGIN_PATH, '\0', "omit-home-plugin-path", false }, - { OPT_OMIT_SYSTEM_PLUGIN_PATH, '\0', "omit-system-plugin-path", false }, - { OPT_PLUGIN_PATH, '\0', "plugin-path", true }, BT_ARGPAR_OPT_DESCR_SENTINEL }; @@ -1771,27 +1648,17 @@ const struct bt_argpar_opt_descr list_plugins_options[] = { */ static struct bt_config *bt_config_list_plugins_from_args(int argc, const char *argv[], - int *retcode, bool force_omit_system_plugin_path, - bool force_omit_home_plugin_path, - const bt_value *initial_plugin_paths) + int *retcode, const bt_value *plugin_paths) { - int ret, i; struct bt_config *cfg = NULL; struct bt_argpar_parse_ret argpar_parse_ret = { 0 }; *retcode = 0; - cfg = bt_config_list_plugins_create(initial_plugin_paths); + cfg = bt_config_list_plugins_create(plugin_paths); if (!cfg) { goto error; } - cfg->omit_system_plugin_path = force_omit_system_plugin_path; - cfg->omit_home_plugin_path = force_omit_home_plugin_path; - ret = append_env_var_plugin_paths(cfg->plugin_paths); - if (ret) { - goto error; - } - /* Parse options */ argpar_parse_ret = bt_argpar_parse(argc, argv, list_plugins_options, true); if (argpar_parse_ret.error) { @@ -1808,45 +1675,18 @@ struct bt_config *bt_config_list_plugins_from_args(int argc, const char *argv[], goto end; } - for (i = 0; i < argpar_parse_ret.items->len; i++) { - struct bt_argpar_item *argpar_item = - g_ptr_array_index(argpar_parse_ret.items, i); - struct bt_argpar_item_opt *argpar_item_opt; - const char *arg; - - if (argpar_item->type == BT_ARGPAR_ITEM_TYPE_NON_OPT) { - struct bt_argpar_item_non_opt *argpar_item_non_opt - = (struct bt_argpar_item_non_opt *) argpar_item; - - BT_CLI_LOGE_APPEND_CAUSE("Unexpected argument: `%s`.", - argpar_item_non_opt->arg); - goto error; - } - - argpar_item_opt = (struct bt_argpar_item_opt *) argpar_item; - arg = argpar_item_opt->arg; - - switch (argpar_item_opt->descr->id) { - case OPT_PLUGIN_PATH: - if (bt_config_append_plugin_paths_check_setuid_setgid( - cfg->plugin_paths, arg)) { - goto error; - } - break; - case OPT_OMIT_SYSTEM_PLUGIN_PATH: - cfg->omit_system_plugin_path = true; - break; - case OPT_OMIT_HOME_PLUGIN_PATH: - cfg->omit_home_plugin_path = true; - break; - default: - BT_CLI_LOGE_APPEND_CAUSE("Unknown command-line option specified (option code %d).", - argpar_item_opt->descr->id); - goto error; - } - } + if (argpar_parse_ret.items->len > 0) { + /* + * At this point we know there's at least one non-option + * argument because we don't reach here with `--help`, + * the only option. + */ + struct bt_argpar_item_non_opt *non_opt = + argpar_parse_ret.items->pdata[0]; - if (append_home_and_system_plugin_paths_cfg(cfg)) { + BT_CLI_LOGE_APPEND_CAUSE( + "Extraneous command-line argument specified to `list-plugins` command: `%s`.", + non_opt->arg); goto error; } @@ -1884,15 +1724,10 @@ void print_run_usage(FILE *fp) fprintf(fp, " -x, --connect=CONNECTION Connect two created components (see the\n"); fprintf(fp, " expected format of CONNECTION below)\n"); fprintf(fp, " -l, --log-level=LVL Set the log level of the current component to LVL\n"); - fprintf(fp, " (`N`, `V`, `D`, `I`, `W`, `E`, or `F`)\n"); - fprintf(fp, " --omit-home-plugin-path Omit home plugins from plugin search path\n"); - fprintf(fp, " (~/.local/lib/babeltrace2/plugins)\n"); - fprintf(fp, " --omit-system-plugin-path Omit system plugins from plugin search path\n"); + fprintf(fp, " (`N`, `T`, `D`, `I`, `W`, `E`, or `F`)\n"); fprintf(fp, " -p, --params=PARAMS Add initialization parameters PARAMS to the\n"); fprintf(fp, " current component (see the expected format\n"); fprintf(fp, " of PARAMS below)\n"); - fprintf(fp, " --plugin-path=PATH[:PATH]... Add PATH to the list of paths from which\n"); - fprintf(fp, " dynamic plugins can be loaded\n"); fprintf(fp, " -r, --reset-base-params Reset the current base parameters to an\n"); fprintf(fp, " empty map\n"); fprintf(fp, " --retry-duration=DUR When babeltrace2(1) needs to retry to run\n"); @@ -1947,9 +1782,8 @@ void print_run_usage(FILE *fp) */ static struct bt_config *bt_config_run_from_args(int argc, const char *argv[], - int *retcode, bool force_omit_system_plugin_path, - bool force_omit_home_plugin_path, - const bt_value *initial_plugin_paths, int default_log_level) + int *retcode, const bt_value *plugin_paths, + int default_log_level) { struct bt_config_component *cur_cfg_comp = NULL; bt_value *cur_base_params = NULL; @@ -1970,10 +1804,7 @@ struct bt_config *bt_config_run_from_args(int argc, const char *argv[], { OPT_CONNECT, 'x', "connect", true }, { OPT_HELP, 'h', "help", false }, { OPT_LOG_LEVEL, 'l', "log-level", true }, - { OPT_OMIT_HOME_PLUGIN_PATH, '\0', "omit-home-plugin-path", false }, - { OPT_OMIT_SYSTEM_PLUGIN_PATH, '\0', "omit-system-plugin-path", false }, { OPT_PARAMS, 'p', "params", true }, - { OPT_PLUGIN_PATH, '\0', "plugin-path", true }, { OPT_RESET_BASE_PARAMS, 'r', "reset-base-params", false }, { OPT_RETRY_DURATION, '\0', "retry-duration", true }, BT_ARGPAR_OPT_DESCR_SENTINEL @@ -1993,14 +1824,12 @@ struct bt_config *bt_config_run_from_args(int argc, const char *argv[], goto end; } - cfg = bt_config_run_create(initial_plugin_paths); + cfg = bt_config_run_create(plugin_paths); if (!cfg) { goto error; } cfg->cmd_data.run.retry_duration_us = 100000; - cfg->omit_system_plugin_path = force_omit_system_plugin_path; - cfg->omit_home_plugin_path = force_omit_home_plugin_path; cur_base_params = bt_value_map_create(); if (!cur_base_params) { BT_CLI_LOGE_APPEND_CAUSE_OOM(); @@ -2019,11 +1848,6 @@ struct bt_config *bt_config_run_from_args(int argc, const char *argv[], goto error; } - ret = append_env_var_plugin_paths(cfg->plugin_paths); - if (ret) { - goto error; - } - /* Parse options */ argpar_parse_ret = bt_argpar_parse(argc, argv, run_options, true); if (argpar_parse_ret.error) { @@ -2060,18 +1884,6 @@ struct bt_config *bt_config_run_from_args(int argc, const char *argv[], arg = argpar_item_opt->arg; switch (argpar_item_opt->descr->id) { - case OPT_PLUGIN_PATH: - if (bt_config_append_plugin_paths_check_setuid_setgid( - cfg->plugin_paths, arg)) { - goto error; - } - break; - case OPT_OMIT_SYSTEM_PLUGIN_PATH: - cfg->omit_system_plugin_path = true; - break; - case OPT_OMIT_HOME_PLUGIN_PATH: - cfg->omit_home_plugin_path = true; - break; case OPT_COMPONENT: { enum bt_config_component_dest dest; @@ -2231,10 +2043,6 @@ struct bt_config *bt_config_run_from_args(int argc, const char *argv[], goto error; } - if (append_home_and_system_plugin_paths_cfg(cfg)) { - goto error; - } - ret = bt_config_cli_args_create_connections(cfg, connection_args, error_buf, 256); @@ -2264,9 +2072,8 @@ end: static struct bt_config *bt_config_run_from_args_array(const bt_value *run_args, - int *retcode, bool force_omit_system_plugin_path, - bool force_omit_home_plugin_path, - const bt_value *initial_plugin_paths, int default_log_level) + int *retcode, const bt_value *plugin_paths, + int default_log_level) { struct bt_config *cfg = NULL; const char **argv; @@ -2297,8 +2104,7 @@ struct bt_config *bt_config_run_from_args_array(const bt_value *run_args, } cfg = bt_config_run_from_args(argc, argv, retcode, - force_omit_system_plugin_path, force_omit_home_plugin_path, - initial_plugin_paths, default_log_level); + plugin_paths, default_log_level); end: free(argv); @@ -2322,15 +2128,10 @@ void print_convert_usage(FILE *fp) fprintf(fp, " conversion graph, and optionally name it\n"); fprintf(fp, " NAME\n"); fprintf(fp, " -l, --log-level=LVL Set the log level of the current component to LVL\n"); - fprintf(fp, " (`N`, `V`, `D`, `I`, `W`, `E`, or `F`)\n"); - fprintf(fp, " --omit-home-plugin-path Omit home plugins from plugin search path\n"); - fprintf(fp, " (~/.local/lib/babeltrace2/plugins)\n"); - fprintf(fp, " --omit-system-plugin-path Omit system plugins from plugin search path\n"); + fprintf(fp, " (`N`, `T`, `D`, `I`, `W`, `E`, or `F`)\n"); fprintf(fp, " -p, --params=PARAMS Add initialization parameters PARAMS to the\n"); fprintf(fp, " current component (see the expected format\n"); fprintf(fp, " of PARAMS below)\n"); - fprintf(fp, " --plugin-path=PATH[:PATH]... Add PATH to the list of paths from which\n"); - fprintf(fp, " dynamic plugins can be loaded\n"); fprintf(fp, " --retry-duration=DUR When babeltrace2(1) needs to retry to run\n"); fprintf(fp, " the graph later, retry in DUR µs\n"); fprintf(fp, " (default: 100000)\n"); @@ -2347,6 +2148,8 @@ void print_convert_usage(FILE *fp) fprintf(fp, "\n"); fprintf(fp, "Implicit `source.ctf.fs` component options:\n"); fprintf(fp, "\n"); + fprintf(fp, " --clock-force-correlate Force the origin of all clocks\n"); + fprintf(fp, " to the Unix epoch\n"); fprintf(fp, " --clock-offset=SEC Set clock offset to SEC seconds\n"); fprintf(fp, " --clock-offset-ns=NS Set clock offset to NS ns\n"); fprintf(fp, "\n"); @@ -2374,11 +2177,6 @@ void print_convert_usage(FILE *fp) fprintf(fp, " -w, --output=PATH Write output text to PATH instead of\n"); fprintf(fp, " the standard output\n"); fprintf(fp, "\n"); - fprintf(fp, "Implicit `filter.utils.muxer` component options:\n"); - fprintf(fp, "\n"); - fprintf(fp, " --clock-force-correlate Assume that clocks are inherently\n"); - fprintf(fp, " correlated across traces\n"); - fprintf(fp, "\n"); fprintf(fp, "Implicit `filter.utils.trimmer` component options:\n"); fprintf(fp, "\n"); fprintf(fp, " -b, --begin=BEGIN Set the beginning time of the conversion\n"); @@ -3180,6 +2978,9 @@ end: * Create `struct implicit_component_args` structures for each of the * source components we identified. Add them to `component_args`. * + * `non_opts` is an array of the non-option arguments passed on the command + * line. + * * `non_opt_params` is an array where each element is an array of * strings containing all the arguments to `--params` that apply to the * non-option argument at the same index. For example, if, for a @@ -3195,6 +2996,7 @@ end: static int create_implicit_component_args_from_auto_discovered_sources( const struct auto_source_discovery *auto_disc, + const bt_value *non_opts, const bt_value *non_opt_params, const bt_value *non_opt_loglevels, GPtrArray *component_args) @@ -3285,6 +3087,42 @@ int create_implicit_component_args_from_auto_discovered_sources( } } + /* + * If single input and a src.ctf.fs component, provide the + * relative path from the path passed on the command line to the + * found trace. + */ + if (bt_value_array_get_length(res->inputs) == 1 && + strcmp(res->plugin_name, "ctf") == 0 && + strcmp(res->source_cc_name, "fs") == 0) { + const bt_value *orig_idx_value = + bt_value_array_borrow_element_by_index( + res->original_input_indices, 0); + uint64_t orig_idx = bt_value_integer_unsigned_get(orig_idx_value); + const bt_value *non_opt_value = + bt_value_array_borrow_element_by_index_const( + non_opts, orig_idx); + const char *non_opt = bt_value_string_get(non_opt_value); + const bt_value *input_value = + bt_value_array_borrow_element_by_index_const( + res->inputs, 0); + const char *input = bt_value_string_get(input_value); + + BT_ASSERT(orig_indices_count == 1); + BT_ASSERT(g_str_has_prefix(input, non_opt)); + + input += strlen(non_opt); + + while (G_IS_DIR_SEPARATOR(*input)) { + input++; + } + + if (strlen(input) > 0) { + append_string_parameter_to_args(comp->extra_params, + "trace-name", input); + } + } + status = append_parameter_to_args(comp->extra_params, "inputs", res->inputs); if (status != 0) { goto error; @@ -3334,9 +3172,8 @@ enum convert_current_item_type { */ static struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], - int *retcode, bool force_omit_system_plugin_path, - bool force_omit_home_plugin_path, - const bt_value *initial_plugin_paths, int *default_log_level) + int *retcode, const bt_value *plugin_paths, + int *default_log_level, const bt_interrupter *interrupter) { enum convert_current_item_type current_item_type = CONVERT_CURRENT_ITEM_TYPE_NONE; @@ -3365,7 +3202,6 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], struct implicit_component_args implicit_debug_info_args = { 0 }; struct implicit_component_args implicit_muxer_args = { 0 }; struct implicit_component_args implicit_trimmer_args = { 0 }; - bt_value *plugin_paths; char error_buf[256] = { 0 }; size_t i; struct bt_common_lttng_live_url_parts lttng_live_url_parts = { 0 }; @@ -3375,6 +3211,7 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], struct bt_argpar_parse_ret argpar_parse_ret = { 0 }; GString *name_gstr = NULL; GString *component_arg_for_run = NULL; + bt_value *live_inputs_array_val = NULL; /* * Array of `struct implicit_component_args *` created for the sources @@ -3389,11 +3226,9 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], const char *auto_source_discovery_restrict_plugin_name = NULL; const char *auto_source_discovery_restrict_component_class_name = NULL; + bool ctf_fs_source_force_clock_class_unix_epoch_origin = false; gchar *ctf_fs_source_clock_class_offset_arg = NULL; gchar *ctf_fs_source_clock_class_offset_ns_arg = NULL; - - (void) bt_value_copy(initial_plugin_paths, &plugin_paths); - *retcode = 0; if (argc < 1) { @@ -3455,11 +3290,6 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], goto error; } - ret = append_env_var_plugin_paths(plugin_paths); - if (ret) { - goto error; - } - non_opts = bt_value_array_create(); if (!non_opts) { BT_CLI_LOGE_APPEND_CAUSE_OOM(); @@ -3500,9 +3330,6 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], * as is to the run command. This pass can also add --name * arguments if needed to automatically name unnamed component * instances. - * - * Also it appends the plugin paths of --plugin-path to - * `plugin_paths`. */ argpar_parse_ret = bt_argpar_parse(argc, argv, convert_options, true); if (argpar_parse_ret.error) { @@ -3653,10 +3480,16 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], * it in `non_opt_params`. */ bt_value *array; + bt_value_array_append_element_status append_element_status; uint64_t idx = bt_value_array_get_length(non_opt_params) - 1; array = bt_value_array_borrow_element_by_index(non_opt_params, idx); - bt_value_array_append_string_element(array, arg); + + append_element_status = bt_value_array_append_string_element(array, arg); + if (append_element_status != BT_VALUE_ARRAY_APPEND_ELEMENT_STATUS_OK) { + BT_CLI_LOGE_APPEND_CAUSE_OOM(); + goto error; + } } else { BT_CLI_LOGE_APPEND_CAUSE( "No current component (--component option) or non-option argument of which to set parameters:\n %s", @@ -3698,15 +3531,6 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], goto error; } - break; - case OPT_OMIT_HOME_PLUGIN_PATH: - force_omit_home_plugin_path = true; - - if (bt_value_array_append_string_element(run_args, - "--omit-home-plugin-path")) { - BT_CLI_LOGE_APPEND_CAUSE_OOM(); - goto error; - } break; case OPT_RETRY_DURATION: if (bt_value_array_append_string_element(run_args, @@ -3715,32 +3539,6 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], goto error; } - if (bt_value_array_append_string_element(run_args, arg)) { - BT_CLI_LOGE_APPEND_CAUSE_OOM(); - goto error; - } - break; - case OPT_OMIT_SYSTEM_PLUGIN_PATH: - force_omit_system_plugin_path = true; - - if (bt_value_array_append_string_element(run_args, - "--omit-system-plugin-path")) { - BT_CLI_LOGE_APPEND_CAUSE_OOM(); - goto error; - } - break; - case OPT_PLUGIN_PATH: - if (bt_config_append_plugin_paths_check_setuid_setgid( - plugin_paths, arg)) { - goto error; - } - - if (bt_value_array_append_string_element(run_args, - "--plugin-path")) { - BT_CLI_LOGE_APPEND_CAUSE_OOM(); - goto error; - } - if (bt_value_array_append_string_element(run_args, arg)) { BT_CLI_LOGE_APPEND_CAUSE_OOM(); goto error; @@ -3901,9 +3699,7 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], implicit_text_args.exists = true; break; case OPT_CLOCK_FORCE_CORRELATE: - append_implicit_component_param( - &implicit_muxer_args, - "assume-absolute-clock-classes", "yes"); + ctf_fs_source_force_clock_class_unix_epoch_origin = true; break; case OPT_CLOCK_GMT: append_implicit_component_param( @@ -4089,24 +3885,25 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], case OPT_STREAM_INTERSECTION: /* * Applies to all traces implementing the - * babeltrace.trace-info query. + * babeltrace.trace-infos query. */ stream_intersection_mode = true; break; case OPT_VERBOSE: - if (*default_log_level != BT_LOG_TRACE && - *default_log_level != BT_LOG_DEBUG) { - *default_log_level = BT_LOG_INFO; - } + *default_log_level = + logging_level_min(*default_log_level, BT_LOG_INFO); break; case OPT_DEBUG: - *default_log_level = BT_LOG_TRACE; + *default_log_level = + logging_level_min(*default_log_level, BT_LOG_TRACE); break; default: break; } } + set_auto_log_levels(default_log_level); + /* * Legacy behaviour: --verbose used to make the `text` output * format print more information. --verbose is now equivalent to @@ -4118,16 +3915,6 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], "verbose", "yes"); } - /* - * Append home and system plugin paths now that we possibly got - * --plugin-path. - */ - if (append_home_and_system_plugin_paths(plugin_paths, - force_omit_system_plugin_path, - force_omit_home_plugin_path)) { - goto error; - } - /* Print CTF metadata or print LTTng live sessions */ if (print_ctf_metadata) { const bt_value *bt_val_non_opt; @@ -4254,9 +4041,22 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], goto end; } - ret = append_implicit_component_extra_param( - &implicit_lttng_live_args, "url", - bt_value_string_get(bt_val_non_opt)); + live_inputs_array_val = bt_value_array_create(); + if (!live_inputs_array_val) { + BT_CLI_LOGE_APPEND_CAUSE_OOM(); + goto error; + } + + if (bt_value_array_append_string_element( + live_inputs_array_val, + bt_value_string_get(bt_val_non_opt))) { + BT_CLI_LOGE_APPEND_CAUSE_OOM(); + goto error; + } + + ret = append_parameter_to_args( + implicit_lttng_live_args.extra_params, + "inputs", live_inputs_array_val); if (ret) { goto error; } @@ -4289,15 +4089,18 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], status = auto_discover_source_components(non_opts, plugins, plugin_count, auto_source_discovery_restrict_component_class_name, - *default_log_level >= 0 ? *default_log_level : cli_default_log_level, - &auto_disc); + *default_log_level, &auto_disc, interrupter); if (status != 0) { + if (status == AUTO_SOURCE_DISCOVERY_STATUS_INTERRUPTED) { + BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN( + "Babeltrace CLI", "Automatic source discovery interrupted by the user"); + } goto error; } status = create_implicit_component_args_from_auto_discovered_sources( - &auto_disc, non_opt_params, non_opt_loglevels, + &auto_disc, non_opts, non_opt_params, non_opt_loglevels, discovered_source_args); if (status != 0) { goto error; @@ -4305,6 +4108,23 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], } } + + /* + * If --clock-force-correlated was given, apply it to any src.ctf.fs + * component. + */ + if (ctf_fs_source_force_clock_class_unix_epoch_origin) { + int n; + + n = append_multiple_implicit_components_param( + discovered_source_args, "source.ctf.fs", "force-clock-class-origin-unix-epoch", + "yes"); + if (n == 0) { + BT_CLI_LOGE_APPEND_CAUSE("--clock-force-correlate specified, but no source.ctf.fs component instantiated."); + goto error; + } + } + /* If --clock-offset was given, apply it to any src.ctf.fs component. */ if (ctf_fs_source_clock_class_offset_arg) { int n; @@ -4420,6 +4240,13 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], goto error; } + /* Make sure there's a single sink component */ + if (g_list_length(sink_names) != 1) { + BT_CLI_LOGE_APPEND_CAUSE( + "More than one sink component specified."); + goto error; + } + /* * Prepend the muxer, the trimmer, and the debug info to the * filter chain so that we have: @@ -4563,18 +4390,8 @@ struct bt_config *bt_config_convert_from_args(int argc, const char *argv[], goto end; } - /* - * If the log level is still unset at this point, set it to - * the program's default. - */ - if (*default_log_level < 0) { - *default_log_level = cli_default_log_level; - } - cfg = bt_config_run_from_args_array(run_args, retcode, - force_omit_system_plugin_path, - force_omit_home_plugin_path, - initial_plugin_paths, *default_log_level); + plugin_paths, *default_log_level); if (!cfg) { goto error; } @@ -4587,14 +4404,6 @@ error: BT_OBJECT_PUT_REF_AND_RESET(cfg); end: - /* - * If the log level is still unset at this point, set it to - * the program's default. - */ - if (*default_log_level < 0) { - *default_log_level = cli_default_log_level; - } - bt_argpar_parse_ret_fini(&argpar_parse_ret); free(output); @@ -4607,6 +4416,7 @@ end: g_string_free(name_gstr, TRUE); } + bt_value_put_ref(live_inputs_array_val); bt_value_put_ref(run_args); bt_value_put_ref(all_names); destroy_glist_of_gstring(source_names); @@ -4622,7 +4432,6 @@ end: finalize_implicit_component_args(&implicit_debug_info_args); finalize_implicit_component_args(&implicit_muxer_args); finalize_implicit_component_args(&implicit_trimmer_args); - bt_value_put_ref(plugin_paths); bt_common_destroy_lttng_live_url_parts(<tng_live_url_parts); auto_source_discovery_fini(&auto_disc); @@ -4650,12 +4459,17 @@ void print_gen_usage(FILE *fp) fprintf(fp, "\n"); fprintf(fp, "General options:\n"); fprintf(fp, "\n"); - fprintf(fp, " -d, --debug Enable debug mode (same as --log-level=V)\n"); - fprintf(fp, " -h, --help Show this help and quit\n"); - fprintf(fp, " -l, --log-level=LVL Set the default log level to LVL (`N`, `V`, `D`,\n"); - fprintf(fp, " `I`, `W` (default), `E`, or `F`)\n"); - fprintf(fp, " -v, --verbose Enable verbose mode (same as --log-level=I)\n"); - fprintf(fp, " -V, --version Show version and quit\n"); + fprintf(fp, " -d, --debug Enable debug mode (same as --log-level=T)\n"); + fprintf(fp, " -h, --help Show this help and quit\n"); + fprintf(fp, " -l, --log-level=LVL Set the default log level to LVL (`N`, `T`, `D`,\n"); + fprintf(fp, " `I`, `W` (default), `E`, or `F`)\n"); + fprintf(fp, " --omit-home-plugin-path Omit home plugins from plugin search path\n"); + fprintf(fp, " (~/.local/lib/babeltrace2/plugins)\n"); + fprintf(fp, " --omit-system-plugin-path Omit system plugins from plugin search path\n"); + fprintf(fp, " --plugin-path=PATH[:PATH]... Add PATH to the list of paths from which\n"); + fprintf(fp, " dynamic plugins can be loaded\n"); + fprintf(fp, " -v, --verbose Enable verbose mode (same as --log-level=I)\n"); + fprintf(fp, " -V, --version Show version and quit\n"); fprintf(fp, "\n"); fprintf(fp, "Available commands:\n"); fprintf(fp, "\n"); @@ -4669,9 +4483,10 @@ void print_gen_usage(FILE *fp) } struct bt_config *bt_config_cli_args_create(int argc, const char *argv[], - int *retcode, bool force_omit_system_plugin_path, - bool force_omit_home_plugin_path, - const bt_value *initial_plugin_paths) + int *retcode, bool omit_system_plugin_path, + bool omit_home_plugin_path, + const bt_value *initial_plugin_paths, + const bt_interrupter *interrupter) { struct bt_config *config = NULL; int i; @@ -4682,6 +4497,7 @@ struct bt_config *bt_config_cli_args_create(int argc, const char *argv[], const char *command_name = NULL; int default_log_level = -1; struct bt_argpar_parse_ret argpar_parse_ret = { 0 }; + bt_value *plugin_paths = NULL; /* Top-level option descriptions. */ static const struct bt_argpar_opt_descr descrs[] = { @@ -4690,6 +4506,9 @@ struct bt_config *bt_config_cli_args_create(int argc, const char *argv[], { OPT_LOG_LEVEL, 'l', "log-level", true }, { OPT_VERBOSE, 'v', "verbose", false }, { OPT_VERSION, 'V', "version", false}, + { OPT_OMIT_HOME_PLUGIN_PATH, '\0', "omit-home-plugin-path", false }, + { OPT_OMIT_SYSTEM_PLUGIN_PATH, '\0', "omit-system-plugin-path", false }, + { OPT_PLUGIN_PATH, '\0', "plugin-path", true }, BT_ARGPAR_OPT_DESCR_SENTINEL }; @@ -4705,13 +4524,27 @@ struct bt_config *bt_config_cli_args_create(int argc, const char *argv[], *retcode = -1; if (!initial_plugin_paths) { - initial_plugin_paths = bt_value_array_create(); - if (!initial_plugin_paths) { - *retcode = 1; - goto end; + plugin_paths = bt_value_array_create(); + if (!plugin_paths) { + goto error; } } else { - bt_value_get_ref(initial_plugin_paths); + bt_value_copy_status copy_status = bt_value_copy( + initial_plugin_paths, &plugin_paths); + if (copy_status) { + goto error; + } + } + + BT_ASSERT(plugin_paths); + + /* + * The `BABELTRACE_PLUGIN_PATH` paths take precedence over the + * `--plugin-path` option's paths, so append it now before + * parsing the general options. + */ + if (append_env_var_plugin_paths(plugin_paths)) { + goto error; } if (argc <= 1) { @@ -4745,27 +4578,39 @@ struct bt_config *bt_config_cli_args_create(int argc, const char *argv[], switch (item_opt->descr->id) { case OPT_DEBUG: - default_log_level = BT_LOG_TRACE; + default_log_level = + logging_level_min(default_log_level, BT_LOG_TRACE); break; case OPT_VERBOSE: - /* - * Legacy: do not override a previous - * --debug because --verbose and --debug - * can be specified together (in this - * case we want the lowest log level to - * apply, TRACE). - */ - default_log_level = BT_LOG_INFO; + default_log_level = + logging_level_min(default_log_level, BT_LOG_INFO); break; case OPT_LOG_LEVEL: - default_log_level = - bt_log_get_level_from_string(item_opt->arg); - if (default_log_level < 0) { + { + int level = bt_log_get_level_from_string(item_opt->arg); + + if (level < 0) { BT_CLI_LOGE_APPEND_CAUSE( "Invalid argument for --log-level option:\n %s", item_opt->arg); goto error; } + + default_log_level = + logging_level_min(default_log_level, level); + break; + } + case OPT_PLUGIN_PATH: + if (bt_config_append_plugin_paths_check_setuid_setgid( + plugin_paths, item_opt->arg)) { + goto error; + } + break; + case OPT_OMIT_SYSTEM_PLUGIN_PATH: + omit_system_plugin_path = true; + break; + case OPT_OMIT_HOME_PLUGIN_PATH: + omit_home_plugin_path = true; break; case OPT_VERSION: print_version(); @@ -4839,43 +4684,52 @@ struct bt_config *bt_config_cli_args_create(int argc, const char *argv[], BT_ASSERT(command_argc >= 0); /* - * The convert command can set its own default log level for - * backward compatibility reasons. It only does so if there's no - * log level yet, so do not force one for this command. + * For all commands other than `convert`, we now know the log level to + * use, so we can apply it with `set_auto_log_levels`. + * + * The convert command has `--debug` and `--verbose` arguments that are + * equivalent to the top-level arguments of the same name. So after it + * has parsed its arguments, `bt_config_convert_from_args` calls + * `set_auto_log_levels` itself. + */ + if (command_type != COMMAND_TYPE_CONVERT) { + set_auto_log_levels(&default_log_level); + } + + /* + * At this point, `plugin_paths` contains the initial plugin + * paths, the paths from the `BABELTRACE_PLUGIN_PATH` paths, and + * the paths from the `--plugin-path` option. + * + * Now append the user and system plugin paths. */ - if (command_type != COMMAND_TYPE_CONVERT && default_log_level < 0) { - /* Default log level */ - default_log_level = cli_default_log_level; + if (append_home_and_system_plugin_paths(plugin_paths, + omit_system_plugin_path, omit_home_plugin_path)) { + goto error; } switch (command_type) { case COMMAND_TYPE_RUN: config = bt_config_run_from_args(command_argc, command_argv, - retcode, force_omit_system_plugin_path, - force_omit_home_plugin_path, initial_plugin_paths, + retcode, plugin_paths, default_log_level); break; case COMMAND_TYPE_CONVERT: config = bt_config_convert_from_args(command_argc, command_argv, - retcode, force_omit_system_plugin_path, - force_omit_home_plugin_path, - initial_plugin_paths, &default_log_level); + retcode, plugin_paths, &default_log_level, interrupter); break; case COMMAND_TYPE_LIST_PLUGINS: config = bt_config_list_plugins_from_args(command_argc, - command_argv, retcode, force_omit_system_plugin_path, - force_omit_home_plugin_path, initial_plugin_paths); + command_argv, retcode, plugin_paths); break; case COMMAND_TYPE_HELP: config = bt_config_help_from_args(command_argc, - command_argv, retcode, force_omit_system_plugin_path, - force_omit_home_plugin_path, initial_plugin_paths, + command_argv, retcode, plugin_paths, default_log_level); break; case COMMAND_TYPE_QUERY: config = bt_config_query_from_args(command_argc, - command_argv, retcode, force_omit_system_plugin_path, - force_omit_home_plugin_path, initial_plugin_paths, + command_argv, retcode, plugin_paths, default_log_level); break; default: @@ -4895,6 +4749,6 @@ error: end: bt_argpar_parse_ret_fini(&argpar_parse_ret); - bt_value_put_ref(initial_plugin_paths); + bt_value_put_ref(plugin_paths); return config; }