X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=src%2Fbin%2Flttng%2Fcommands%2Fremove_trigger.cpp;h=08d4873f08a4cb9b9b66611eaeb51331c773ea76;hb=aabf6773ee8aa3e2df44473147e9e999cdeca57a;hp=2ac237c3a872ee7449a065d403f601458f615794;hpb=48a4000561343808724f7cb5fa8c131877489ccd;p=lttng-tools.git diff --git a/src/bin/lttng/commands/remove_trigger.cpp b/src/bin/lttng/commands/remove_trigger.cpp index 2ac237c3a..08d4873f0 100644 --- a/src/bin/lttng/commands/remove_trigger.cpp +++ b/src/bin/lttng/commands/remove_trigger.cpp @@ -5,16 +5,19 @@ * */ -#include "../command.h" +#include "../command.hpp" +#include "common/argpar-utils/argpar-utils.hpp" #include "common/argpar/argpar.h" -#include "common/mi-lttng.h" +#include "common/mi-lttng.hpp" + #include + #include #ifdef LTTNG_EMBED_HELP static const char help_msg[] = #include -; + ; #endif enum { @@ -23,16 +26,14 @@ enum { OPT_OWNER_UID, }; -static const -struct argpar_opt_descr remove_trigger_options[] = { +static const struct argpar_opt_descr remove_trigger_options[] = { { OPT_HELP, 'h', "help", false }, { OPT_LIST_OPTIONS, '\0', "list-options", false }, { OPT_OWNER_UID, '\0', "owner-uid", true }, ARGPAR_OPT_DESCR_SENTINEL, }; -static -bool assign_string(char **dest, const char *src, const char *opt_name) +static bool assign_string(char **dest, const char *src, const char *opt_name) { bool ret; @@ -61,20 +62,21 @@ int cmd_remove_trigger(int argc, const char **argv) { enum lttng_error_code ret_code; int ret; - struct argpar_parse_ret argpar_parse_ret = {}; - const char *name = NULL; + struct argpar_iter *argpar_iter = nullptr; + const struct argpar_item *argpar_item = nullptr; + const char *name = nullptr; int i; - struct lttng_triggers *triggers = NULL; + struct lttng_triggers *triggers = nullptr; unsigned int triggers_count; enum lttng_trigger_status trigger_status; - const struct lttng_trigger *trigger_to_remove = NULL; - char *owner_uid = NULL; + const struct lttng_trigger *trigger_to_remove = nullptr; + char *owner_uid = nullptr; long long uid; - struct mi_writer *mi_writer = NULL; + struct mi_writer *mi_writer = nullptr; + const char **args; if (lttng_opt_mi) { - mi_writer = mi_lttng_writer_create( - fileno(stdout), lttng_opt_mi); + mi_writer = mi_lttng_writer_create(fileno(stdout), lttng_opt_mi); if (!mi_writer) { ret = CMD_ERROR; goto error; @@ -82,50 +84,58 @@ int cmd_remove_trigger(int argc, const char **argv) /* Open command element. */ ret = mi_lttng_writer_command_open(mi_writer, - mi_lttng_element_command_remove_trigger); + mi_lttng_element_command_remove_trigger); if (ret) { ret = CMD_ERROR; goto error; } /* Open output element. */ - ret = mi_lttng_writer_open_element( - mi_writer, mi_lttng_element_command_output); + ret = mi_lttng_writer_open_element(mi_writer, mi_lttng_element_command_output); if (ret) { ret = CMD_ERROR; goto error; } } - argpar_parse_ret = argpar_parse(argc - 1, argv + 1, - remove_trigger_options, true); - if (!argpar_parse_ret.items) { - ERR("%s", argpar_parse_ret.error); + args = argv + 1; + + argpar_iter = argpar_iter_create(argc - 1, args, remove_trigger_options); + if (!argpar_iter) { + ERR("Failed to allocate an argpar iter."); goto error; } - for (i = 0; i < argpar_parse_ret.items->n_items; i++) { - const struct argpar_item *item = - argpar_parse_ret.items->items[i]; + while (true) { + enum parse_next_item_status status; + + status = + parse_next_item(argpar_iter, &argpar_item, 1, args, true, nullptr, nullptr); + if (status == PARSE_NEXT_ITEM_STATUS_ERROR || + status == PARSE_NEXT_ITEM_STATUS_ERROR_MEMORY) { + goto error; + } else if (status == PARSE_NEXT_ITEM_STATUS_END) { + break; + } + + assert(status == PARSE_NEXT_ITEM_STATUS_OK); - if (item->type == ARGPAR_ITEM_TYPE_OPT) { - const struct argpar_item_opt *item_opt = - (const struct argpar_item_opt *) item; + if (argpar_item_type(argpar_item) == ARGPAR_ITEM_TYPE_OPT) { + const struct argpar_opt_descr *descr = argpar_item_opt_descr(argpar_item); + const char *arg = argpar_item_opt_arg(argpar_item); - switch (item_opt->descr->id) { + switch (descr->id) { case OPT_HELP: SHOW_HELP(); ret = 0; goto end; case OPT_LIST_OPTIONS: - list_cmd_options_argpar(stdout, - remove_trigger_options); + list_cmd_options_argpar(stdout, remove_trigger_options); ret = 0; goto end; case OPT_OWNER_UID: { - if (!assign_string(&owner_uid, item_opt->arg, - "--owner-uid")) { + if (!assign_string(&owner_uid, arg, "--owner-uid")) { goto error; } break; @@ -134,15 +144,14 @@ int cmd_remove_trigger(int argc, const char **argv) abort(); } } else { - const struct argpar_item_non_opt *item_non_opt = - (const struct argpar_item_non_opt *) item; + const char *arg = argpar_item_non_opt_arg(argpar_item); if (name) { - ERR("Unexpected argument '%s'", item_non_opt->arg); + ERR("Unexpected argument '%s'", arg); goto error; } - name = item_non_opt->arg; + name = arg; } } @@ -189,8 +198,7 @@ int cmd_remove_trigger(int argc, const char **argv) abort(); } - trigger_status = lttng_trigger_get_owner_uid( - trigger, &trigger_uid); + trigger_status = lttng_trigger_get_owner_uid(trigger, &trigger_uid); LTTNG_ASSERT(trigger_status == LTTNG_TRIGGER_STATUS_OK); if (trigger_uid == uid && strcmp(trigger_name, name) == 0) { @@ -211,8 +219,7 @@ int cmd_remove_trigger(int argc, const char **argv) } if (lttng_opt_mi) { - ret_code = lttng_trigger_mi_serialize( - trigger_to_remove, mi_writer, NULL); + ret_code = lttng_trigger_mi_serialize(trigger_to_remove, mi_writer, nullptr); if (ret_code != LTTNG_OK) { goto error; } @@ -235,8 +242,8 @@ end: goto cleanup; } - mi_ret = mi_lttng_writer_write_element_bool(mi_writer, - mi_lttng_element_command_success, ret ? 0 : 1); + mi_ret = mi_lttng_writer_write_element_bool( + mi_writer, mi_lttng_element_command_success, ret ? 0 : 1); if (mi_ret) { ret = 1; goto cleanup; @@ -251,7 +258,8 @@ end: } cleanup: - argpar_parse_ret_fini(&argpar_parse_ret); + argpar_item_destroy(argpar_item); + argpar_iter_destroy(argpar_iter); lttng_triggers_destroy(triggers); free(owner_uid);