X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng%2Fcommands%2Fdisable_channels.cpp;h=3b188b8d3a98da250441669f5f04a96c6613b91f;hb=cd9adb8b829564212158943a0d279bb35322ab30;hp=cf9f20bb6d3fd2a539651c6c08d6a09699ca68c5;hpb=48a4000561343808724f7cb5fa8c131877489ccd;p=lttng-tools.git diff --git a/src/bin/lttng/commands/disable_channels.cpp b/src/bin/lttng/commands/disable_channels.cpp index cf9f20bb6..3b188b8d3 100644 --- a/src/bin/lttng/commands/disable_channels.cpp +++ b/src/bin/lttng/commands/disable_channels.cpp @@ -1,11 +1,17 @@ /* - * Copyright (C) 2011 David Goulet + * Copyright (C) 2011 EfficiOS Inc. * * SPDX-License-Identifier: GPL-2.0-only * */ #define _LGPL_SOURCE +#include "../command.hpp" + +#include + +#include + #include #include #include @@ -14,12 +20,6 @@ #include #include -#include -#include - -#include "../command.h" - -static char *opt_channels; static int opt_kernel; static char *opt_session_name; static int opt_userspace; @@ -27,7 +27,7 @@ static int opt_userspace; #ifdef LTTNG_EMBED_HELP static const char help_msg[] = #include -; + ; #endif enum { @@ -41,16 +41,15 @@ static struct mi_writer *writer; static struct poptOption long_options[] = { /* longName, shortName, argInfo, argPtr, value, descrip, argDesc */ - {"help", 'h', POPT_ARG_NONE, 0, OPT_HELP, 0, 0}, - {"session", 's', POPT_ARG_STRING, &opt_session_name, 0, 0, 0}, - {"kernel", 'k', POPT_ARG_VAL, &opt_kernel, 1, 0, 0}, - {"userspace", 'u', POPT_ARG_NONE, 0, OPT_USERSPACE, 0, 0}, - {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL}, - {0, 0, 0, 0, 0, 0, 0} + { "help", 'h', POPT_ARG_NONE, nullptr, OPT_HELP, nullptr, nullptr }, + { "session", 's', POPT_ARG_STRING, &opt_session_name, 0, nullptr, nullptr }, + { "kernel", 'k', POPT_ARG_VAL, &opt_kernel, 1, nullptr, nullptr }, + { "userspace", 'u', POPT_ARG_NONE, nullptr, OPT_USERSPACE, nullptr, nullptr }, + { "list-options", 0, POPT_ARG_NONE, nullptr, OPT_LIST_OPTIONS, nullptr, nullptr }, + { nullptr, 0, 0, nullptr, 0, nullptr, nullptr } }; -static int mi_partial_channel_print(char *channel_name, unsigned int enabled, - int success) +static int mi_partial_channel_print(char *channel_name, unsigned int enabled, int success) { int ret; @@ -64,22 +63,19 @@ static int mi_partial_channel_print(char *channel_name, unsigned int enabled, } /* Name */ - ret = mi_lttng_writer_write_element_string(writer, config_element_name, - channel_name); + ret = mi_lttng_writer_write_element_string(writer, config_element_name, channel_name); if (ret) { goto end; } /* Enabled ? */ - ret = mi_lttng_writer_write_element_bool(writer, config_element_enabled, - enabled); + ret = mi_lttng_writer_write_element_bool(writer, config_element_enabled, enabled); if (ret) { goto end; } /* Success ? */ - ret = mi_lttng_writer_write_element_bool(writer, - mi_lttng_element_success, success); + ret = mi_lttng_writer_write_element_bool(writer, mi_lttng_element_success, success); if (ret) { goto end; } @@ -94,7 +90,7 @@ end: /* * Disabling channel using the lttng API. */ -static int disable_channels(char *session_name) +static int disable_channels(char *session_name, char *channel_list) { int ret = CMD_SUCCESS, warn = 0, success; @@ -116,7 +112,7 @@ static int disable_channels(char *session_name) } handle = lttng_create_handle(session_name, &dom); - if (handle == NULL) { + if (handle == nullptr) { ret = -1; goto error; } @@ -129,18 +125,19 @@ static int disable_channels(char *session_name) ret = CMD_ERROR; goto error; } - } /* Strip channel list */ - channel_name = strtok(opt_channels, ","); - while (channel_name != NULL) { + channel_name = strtok(channel_list, ","); + while (channel_name != nullptr) { DBG("Disabling channel %s", channel_name); ret = lttng_disable_channel(handle, channel_name); if (ret < 0) { - ERR("Channel %s: %s (session %s)", channel_name, - lttng_strerror(ret), session_name); + ERR("Channel %s: %s (session %s)", + channel_name, + lttng_strerror(ret), + session_name); warn = 1; /* @@ -155,8 +152,9 @@ static int disable_channels(char *session_name) } else { MSG("%s channel %s disabled for session %s", - lttng_domain_type_str(dom.type), - channel_name, session_name); + lttng_domain_type_str(dom.type), + channel_name, + session_name); enabled = 0; success = 1; } @@ -171,7 +169,7 @@ static int disable_channels(char *session_name) } /* Next channel */ - channel_name = strtok(NULL, ","); + channel_name = strtok(nullptr, ","); } ret = CMD_SUCCESS; @@ -206,10 +204,12 @@ int cmd_disable_channels(int argc, const char **argv) { int opt, ret = CMD_SUCCESS, command_ret = CMD_SUCCESS, success = 1; static poptContext pc; - char *session_name = NULL; - const char *leftover = NULL; + char *session_name = nullptr; + char *channel_list = nullptr; + const char *arg_channel_list = nullptr; + const char *leftover = nullptr; - pc = poptGetContext(NULL, argc, argv, long_options, 0); + pc = poptGetContext(nullptr, argc, argv, long_options, 0); poptReadDefaultConfig(pc, 0); while ((opt = poptGetNextOpt(pc)) != -1) { @@ -229,16 +229,22 @@ int cmd_disable_channels(int argc, const char **argv) } } - ret = print_missing_or_multiple_domains( - opt_kernel + opt_userspace, false); + ret = print_missing_or_multiple_domains(opt_kernel + opt_userspace, false); if (ret) { ret = CMD_ERROR; goto end; } - opt_channels = (char*) poptGetArg(pc); - if (opt_channels == NULL) { - ERR("Missing channel name(s).\n"); + arg_channel_list = poptGetArg(pc); + if (arg_channel_list == nullptr) { + ERR("Missing channel name(s)."); + ret = CMD_ERROR; + goto end; + } + + channel_list = strdup(arg_channel_list); + if (channel_list == nullptr) { + PERROR("Failed to copy channel name"); ret = CMD_ERROR; goto end; } @@ -252,7 +258,7 @@ int cmd_disable_channels(int argc, const char **argv) if (!opt_session_name) { session_name = get_session_name(); - if (session_name == NULL) { + if (session_name == nullptr) { ret = CMD_ERROR; goto end; } @@ -270,22 +276,21 @@ int cmd_disable_channels(int argc, const char **argv) /* Open command element */ ret = mi_lttng_writer_command_open(writer, - mi_lttng_element_command_disable_channel); + mi_lttng_element_command_disable_channel); if (ret) { ret = CMD_ERROR; goto end; } /* Open output element */ - ret = mi_lttng_writer_open_element(writer, - mi_lttng_element_command_output); + ret = mi_lttng_writer_open_element(writer, mi_lttng_element_command_output); if (ret) { ret = CMD_ERROR; goto end; } } - command_ret = disable_channels(session_name); + command_ret = disable_channels(session_name, channel_list); if (command_ret) { success = 0; } @@ -300,8 +305,7 @@ int cmd_disable_channels(int argc, const char **argv) } /* Success ? */ - ret = mi_lttng_writer_write_element_bool(writer, - mi_lttng_element_success, success); + ret = mi_lttng_writer_write_element_bool(writer, mi_lttng_element_success, success); if (ret) { ret = CMD_ERROR; goto end; @@ -326,6 +330,8 @@ end: free(session_name); } + free(channel_list); + /* Overwrite ret if an error occurred in disable_channels */ ret = command_ret ? command_ret : ret;