X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng%2Fcommands%2Fremove_trigger.c;h=3c6e2b3f0d641d2182223614b1e20de526827b16;hp=f923cdd4bf62994220acd259076d9b0e798e028b;hb=523c4f8cdeb927b789710e3dafcb3f249751ccfd;hpb=0efb2ad7fc448283184e43d6fb0915febae45384 diff --git a/src/bin/lttng/commands/remove_trigger.c b/src/bin/lttng/commands/remove_trigger.c index f923cdd4b..3c6e2b3f0 100644 --- a/src/bin/lttng/commands/remove_trigger.c +++ b/src/bin/lttng/commands/remove_trigger.c @@ -7,6 +7,7 @@ #include "../command.h" #include "common/argpar/argpar.h" +#include "common/mi-lttng.h" #include #include @@ -58,9 +59,10 @@ end: 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 *id = NULL; + const char *name = NULL; int i; struct lttng_triggers *triggers = NULL; unsigned int triggers_count; @@ -68,6 +70,32 @@ int cmd_remove_trigger(int argc, const char **argv) const struct lttng_trigger *trigger_to_remove = NULL; char *owner_uid = NULL; long long uid; + struct mi_writer *mi_writer = NULL; + + if (lttng_opt_mi) { + mi_writer = mi_lttng_writer_create( + fileno(stdout), lttng_opt_mi); + if (!mi_writer) { + ret = CMD_ERROR; + goto error; + } + + /* Open command element. */ + ret = mi_lttng_writer_command_open(mi_writer, + 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); + if (ret) { + ret = CMD_ERROR; + goto error; + } + } argpar_parse_ret = argpar_parse(argc - 1, argv + 1, remove_trigger_options, true); @@ -109,17 +137,17 @@ int cmd_remove_trigger(int argc, const char **argv) const struct argpar_item_non_opt *item_non_opt = (const struct argpar_item_non_opt *) item; - if (id) { + if (name) { ERR("Unexpected argument '%s'", item_non_opt->arg); goto error; } - id = item_non_opt->arg; + name = item_non_opt->arg; } } - if (!id) { - ERR("Missing `id` argument."); + if (!name) { + ERR("Missing `name` argument."); goto error; } @@ -165,24 +193,31 @@ int cmd_remove_trigger(int argc, const char **argv) trigger, &trigger_uid); assert(trigger_status == LTTNG_TRIGGER_STATUS_OK); - if (trigger_uid == uid && strcmp(trigger_name, id) == 0) { + if (trigger_uid == uid && strcmp(trigger_name, name) == 0) { trigger_to_remove = trigger; break; } } if (!trigger_to_remove) { - ERR("Couldn't find trigger with id `%s`.", id); + ERR("Couldn't find trigger with name `%s`.", name); goto error; } ret = lttng_unregister_trigger(trigger_to_remove); if (ret != 0) { - ERR("Failed to unregister trigger `%s`.", id); + ERR("Failed to unregister trigger `%s`.", name); goto error; } - MSG("Removed trigger `%s`.", id); + if (lttng_opt_mi) { + ret_code = lttng_trigger_mi_serialize( + trigger_to_remove, mi_writer, NULL); + if (ret_code != LTTNG_OK) { + goto error; + } + } + MSG("Removed trigger `%s`.", name); ret = 0; goto end; @@ -191,9 +226,38 @@ error: ret = 1; end: + /* Mi closing. */ + if (lttng_opt_mi) { + /* Close output element. */ + int mi_ret = mi_lttng_writer_close_element(mi_writer); + if (mi_ret) { + ret = 1; + goto cleanup; + } + + 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; + } + + /* Command element close. */ + mi_ret = mi_lttng_writer_command_close(mi_writer); + if (mi_ret) { + ret = 1; + goto cleanup; + } + } + +cleanup: argpar_parse_ret_fini(&argpar_parse_ret); lttng_triggers_destroy(triggers); free(owner_uid); + if (mi_writer && mi_lttng_writer_destroy(mi_writer)) { + /* Preserve original error code. */ + ret = ret ? ret : CMD_ERROR; + } return ret; }