#include "babeltrace2-cfg.h"
#include "babeltrace2-cfg-cli-args.h"
#include "babeltrace2-cfg-cli-args-connect.h"
-#include "babeltrace2-cfg-cli-params-arg.h"
+#include "param-parse/param-parse.h"
#include "babeltrace2-log-level.h"
#include "babeltrace2-plugins.h"
#include "babeltrace2-query.h"
#include "autodisc/autodisc.h"
#include "common/version.h"
-/* INI-style parsing FSM states */
-enum ini_parsing_fsm_state {
- /* Expect a map key (identifier) */
- INI_EXPECT_MAP_KEY,
-
- /* Expect an equal character ('=') */
- INI_EXPECT_EQUAL,
-
- /* Expect a value */
- INI_EXPECT_VALUE,
-
- /* Expect a comma character (',') */
- INI_EXPECT_COMMA,
-};
-
-/* INI-style parsing state variables */
-struct ini_parsing_state {
- /* Lexical scanner (owned by this) */
- GScanner *scanner;
-
- /* Output map value object being filled (owned by this) */
- bt_value *params;
-
- /* Next expected FSM state */
- enum ini_parsing_fsm_state expecting;
-
- /* Last decoded map key (owned by this) */
- char *last_map_key;
-
- /* Complete INI-style string to parse (not owned by this) */
- const char *arg;
-
- /* Error buffer (not owned by this) */
- GString *ini_error;
-};
-
/* Offset option with "is set" boolean */
struct offset_opt {
int64_t value;
const bt_value *names_array, const char *prefix)
{
int ret = 0;
- int i;
+ uint64_t i;
GString *tmpstr = NULL, *default_value = NULL;
bool default_set = false, non_default_set = false;
struct bt_config *cfg = NULL;
const char *component_class_spec = NULL;
const char *query_object = NULL;
- bt_value *params;
GString *error_str = NULL;
struct bt_argpar_parse_ret argpar_parse_ret = { 0 };
- params = bt_value_null;
- bt_value_get_ref(bt_value_null);
+ bt_value *params = bt_value_map_create();
+ if (!params) {
+ BT_CLI_LOGE_APPEND_CAUSE_OOM();
+ goto error;
+ }
*retcode = 0;
cfg = bt_config_query_create(plugin_paths);
switch (argpar_item_opt->descr->id) {
case OPT_PARAMS:
{
- bt_value_put_ref(params);
- params = cli_value_from_arg(arg, error_str);
- if (!params) {
+ bt_value *parsed_params = bt_param_parse(arg, error_str);
+ bt_value_map_extend_status extend_status;
+ if (!parsed_params) {
BT_CLI_LOGE_APPEND_CAUSE("Invalid format for --params option's argument:\n %s",
error_str->str);
goto error;
}
+
+ extend_status = bt_value_map_extend(params, parsed_params);
+ BT_VALUE_PUT_REF_AND_RESET(parsed_params);
+ if (extend_status) {
+ BT_CLI_LOGE_APPEND_CAUSE("Cannot extend current parameters with --params option's argument:\n %s",
+ arg);
+ goto error;
+ }
break;
}
default:
case OPT_PARAMS:
{
bt_value *params;
- bt_value *params_to_set;
if (!cur_cfg_comp) {
BT_CLI_LOGE_APPEND_CAUSE("Cannot add parameters to unavailable component:\n %s",
goto error;
}
- params = cli_value_from_arg(arg, error_str);
+ params = bt_param_parse(arg, error_str);
if (!params) {
BT_CLI_LOGE_APPEND_CAUSE("Invalid format for --params option's argument:\n %s",
error_str->str);
goto error;
}
- extend_status = bt_value_map_extend(
- cur_cfg_comp->params, params, ¶ms_to_set);
+ extend_status = bt_value_map_extend(cur_cfg_comp->params,
+ params);
BT_VALUE_PUT_REF_AND_RESET(params);
if (extend_status != BT_VALUE_MAP_EXTEND_STATUS_OK) {
BT_CLI_LOGE_APPEND_CAUSE("Cannot extend current component parameters with --params option's argument:\n %s",
goto error;
}
- BT_OBJECT_MOVE_REF(cur_cfg_comp->params, params_to_set);
break;
}
case OPT_LOG_LEVEL:
break;
case OPT_BASE_PARAMS:
{
- bt_value *params = cli_value_from_arg(arg, error_str);
+ bt_value *params = bt_param_parse(arg, error_str);
if (!params) {
BT_CLI_LOGE_APPEND_CAUSE("Invalid format for --base-params option's argument:\n %s",
{
struct bt_config *cfg = NULL;
const char **argv;
- int64_t i, len;
- const size_t argc = bt_value_array_get_length(run_args);
+ uint64_t i, len = bt_value_array_get_length(run_args);
- argv = calloc(argc, sizeof(*argv));
+ BT_ASSERT(len <= SIZE_MAX);
+ argv = calloc((size_t) len, sizeof(*argv));
if (!argv) {
BT_CLI_LOGE_APPEND_CAUSE_OOM();
goto end;
}
- len = bt_value_array_get_length(run_args);
- if (len < 0) {
- BT_CLI_LOGE_APPEND_CAUSE("Invalid executable arguments.");
- goto end;
- }
for (i = 0; i < len; i++) {
const bt_value *arg_value =
bt_value_array_borrow_element_by_index_const(run_args,
argv[i] = arg;
}
- cfg = bt_config_run_from_args(argc, argv, retcode,
+ cfg = bt_config_run_from_args((int) len, argv, retcode,
plugin_paths, default_log_level);
end:
bt_value *run_args)
{
int ret = 0;
- size_t i;
+ uint64_t i;
GString *component_arg_for_run = NULL;
if (!impl_args->exists) {
}
}
- for (i = 0; i < bt_value_array_get_length(impl_args->extra_params);
- i++) {
+ for (i = 0; i < bt_value_array_get_length(impl_args->extra_params); i++) {
const bt_value *elem;
const char *arg;
uint64_t sz = bt_value_array_get_length(value);
for (uint64_t i = 0; i < sz; i++) {
const bt_value *item;
- int ret;
if (i > 0) {
g_string_append(buf, ", ");
* here.
*/
if (print_run_args || print_run_args_0) {
+ uint64_t args_idx, args_len;
if (stream_intersection_mode) {
BT_CLI_LOGE_APPEND_CAUSE("Cannot specify --stream-intersection with --run-args or --run-args-0.");
goto error;
}
- for (i = 0; i < bt_value_array_get_length(run_args); i++) {
+ args_len = bt_value_array_get_length(run_args);
+ for (args_idx = 0; args_idx < args_len; args_idx++) {
const bt_value *arg_value =
bt_value_array_borrow_element_by_index(run_args,
- i);
+ args_idx);
const char *arg;
GString *quoted = NULL;
const char *arg_to_print;
g_string_free(quoted, TRUE);
}
- if (i < bt_value_array_get_length(run_args) - 1) {
+ if (args_idx < args_len - 1) {
if (print_run_args) {
putchar(' ');
} else {