clang-tidy: add Chrome-inspired checks
[lttng-tools.git] / src / bin / lttng / commands / enable_events.cpp
index 9d9a28ab86486cdd1c1bcb9b9e113094a5101f64..ef58bfa75ff0f752fc57a63c32168c1ea5faac3f 100644 (file)
@@ -6,36 +6,35 @@
  */
 
 #define _LGPL_SOURCE
+#include <common/compat/getenv.hpp>
+#include <common/compat/string.hpp>
+#include <common/sessiond-comm/sessiond-comm.hpp>
+#include <common/string-utils/string-utils.hpp>
+#include <common/utils.hpp>
+
+#include <ctype.h>
+#include <inttypes.h>
 #include <popt.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <unistd.h>
-#include <inttypes.h>
-#include <ctype.h>
-
-#include <common/sessiond-comm/sessiond-comm.hpp>
-#include <common/compat/string.hpp>
-#include <common/compat/getenv.hpp>
-#include <common/string-utils/string-utils.hpp>
-#include <common/utils.hpp>
 
 /* Mi dependancy */
+#include "../command.hpp"
+#include "../loglevel.hpp"
+#include "../uprobe.hpp"
+
 #include <common/mi-lttng.hpp>
 
 #include <lttng/domain-internal.hpp>
 #include <lttng/event-internal.hpp>
 
-#include "../command.hpp"
-#include "../loglevel.hpp"
-#include "../uprobe.hpp"
-
 #if (LTTNG_SYMBOL_NAME_LEN == 256)
-#define LTTNG_SYMBOL_NAME_LEN_SCANF_IS_A_BROKEN_API    "255"
+#define LTTNG_SYMBOL_NAME_LEN_SCANF_IS_A_BROKEN_API "255"
 #endif
 
-static char *opt_event_list;
 static int opt_event_type;
 static const char *opt_loglevel;
 static int opt_loglevel_type;
@@ -56,7 +55,7 @@ static char *opt_exclude;
 #ifdef LTTNG_EMBED_HELP
 static const char help_msg[] =
 #include <lttng-enable-event.1.h>
-;
+       ;
 #endif
 
 enum {
@@ -79,26 +78,32 @@ 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},
-       {"all",            'a', POPT_ARG_VAL, &opt_enable_all, 1, 0, 0},
-       {"channel",        'c', POPT_ARG_STRING, &opt_channel_name, 0, 0, 0},
-       {"kernel",         'k', POPT_ARG_VAL, &opt_kernel, 1, 0, 0},
-       {"userspace",      'u', POPT_ARG_NONE, 0, OPT_USERSPACE, 0, 0},
-       {"jul",            'j', POPT_ARG_VAL, &opt_jul, 1, 0, 0},
-       {"log4j",          'l', POPT_ARG_VAL, &opt_log4j, 1, 0, 0},
-       {"python",         'p', POPT_ARG_VAL, &opt_python, 1, 0, 0},
-       {"tracepoint",     0,   POPT_ARG_NONE, 0, OPT_TRACEPOINT, 0, 0},
-       {"probe",          0,   POPT_ARG_STRING, &opt_probe, OPT_PROBE, 0, 0},
-       {"userspace-probe",0,   POPT_ARG_STRING, &opt_userspace_probe, OPT_USERSPACE_PROBE, 0, 0},
-       {"function",       0,   POPT_ARG_STRING, &opt_function, OPT_FUNCTION, 0, 0},
-       {"syscall",        0,   POPT_ARG_NONE, 0, OPT_SYSCALL, 0, 0},
-       {"loglevel",       0,     POPT_ARG_STRING, 0, OPT_LOGLEVEL, 0, 0},
-       {"loglevel-only",  0,     POPT_ARG_STRING, 0, OPT_LOGLEVEL_ONLY, 0, 0},
-       {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL},
-       {"filter",         'f', POPT_ARG_STRING, &opt_filter, OPT_FILTER, 0, 0},
-       {"exclude",        'x', POPT_ARG_STRING, &opt_exclude, OPT_EXCLUDE, 0, 0},
-       {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 },
+       { "all", 'a', POPT_ARG_VAL, &opt_enable_all, 1, nullptr, nullptr },
+       { "channel", 'c', POPT_ARG_STRING, &opt_channel_name, 0, nullptr, nullptr },
+       { "kernel", 'k', POPT_ARG_VAL, &opt_kernel, 1, nullptr, nullptr },
+       { "userspace", 'u', POPT_ARG_NONE, nullptr, OPT_USERSPACE, nullptr, nullptr },
+       { "jul", 'j', POPT_ARG_VAL, &opt_jul, 1, nullptr, nullptr },
+       { "log4j", 'l', POPT_ARG_VAL, &opt_log4j, 1, nullptr, nullptr },
+       { "python", 'p', POPT_ARG_VAL, &opt_python, 1, nullptr, nullptr },
+       { "tracepoint", 0, POPT_ARG_NONE, nullptr, OPT_TRACEPOINT, nullptr, nullptr },
+       { "probe", 0, POPT_ARG_STRING, &opt_probe, OPT_PROBE, nullptr, nullptr },
+       { "userspace-probe",
+         0,
+         POPT_ARG_STRING,
+         &opt_userspace_probe,
+         OPT_USERSPACE_PROBE,
+         nullptr,
+         nullptr },
+       { "function", 0, POPT_ARG_STRING, &opt_function, OPT_FUNCTION, nullptr, nullptr },
+       { "syscall", 0, POPT_ARG_NONE, nullptr, OPT_SYSCALL, nullptr, nullptr },
+       { "loglevel", 0, POPT_ARG_STRING, nullptr, OPT_LOGLEVEL, nullptr, nullptr },
+       { "loglevel-only", 0, POPT_ARG_STRING, nullptr, OPT_LOGLEVEL_ONLY, nullptr, nullptr },
+       { "list-options", 0, POPT_ARG_NONE, nullptr, OPT_LIST_OPTIONS, nullptr, nullptr },
+       { "filter", 'f', POPT_ARG_STRING, &opt_filter, OPT_FILTER, nullptr, nullptr },
+       { "exclude", 'x', POPT_ARG_STRING, &opt_exclude, OPT_EXCLUDE, nullptr, nullptr },
+       { nullptr, 0, 0, nullptr, 0, nullptr, nullptr }
 };
 
 /*
@@ -109,17 +114,20 @@ static int parse_probe_opts(struct lttng_event *ev, char *opt)
        int ret = CMD_SUCCESS;
        int match;
        char s_hex[19];
-#define S_HEX_LEN_SCANF_IS_A_BROKEN_API "18"   /* 18 is (19 - 1) (\0 is extra) */
+#define S_HEX_LEN_SCANF_IS_A_BROKEN_API "18" /* 18 is (19 - 1) (\0 is extra) */
        char name[LTTNG_SYMBOL_NAME_LEN];
 
-       if (opt == NULL) {
+       if (opt == nullptr) {
                ret = CMD_ERROR;
                goto end;
        }
 
        /* Check for symbol+offset */
-       match = sscanf(opt, "%" LTTNG_SYMBOL_NAME_LEN_SCANF_IS_A_BROKEN_API
-                       "[^'+']+%" S_HEX_LEN_SCANF_IS_A_BROKEN_API "s", name, s_hex);
+       match = sscanf(opt,
+                      "%" LTTNG_SYMBOL_NAME_LEN_SCANF_IS_A_BROKEN_API
+                      "[^'+']+%" S_HEX_LEN_SCANF_IS_A_BROKEN_API "s",
+                      name,
+                      s_hex);
        if (match == 2) {
                strncpy(ev->attr.probe.symbol_name, name, LTTNG_SYMBOL_NAME_LEN);
                ev->attr.probe.symbol_name[LTTNG_SYMBOL_NAME_LEN - 1] = '\0';
@@ -129,7 +137,7 @@ static int parse_probe_opts(struct lttng_event *ev, char *opt)
                        ret = CMD_ERROR;
                        goto end;
                }
-               ev->attr.probe.offset = strtoull(s_hex, NULL, 0);
+               ev->attr.probe.offset = strtoull(s_hex, nullptr, 0);
                DBG("probe offset %" PRIu64, ev->attr.probe.offset);
                ev->attr.probe.addr = 0;
                goto end;
@@ -137,8 +145,7 @@ static int parse_probe_opts(struct lttng_event *ev, char *opt)
 
        /* Check for symbol */
        if (isalpha(name[0]) || name[0] == '_') {
-               match = sscanf(opt, "%" LTTNG_SYMBOL_NAME_LEN_SCANF_IS_A_BROKEN_API "s",
-                       name);
+               match = sscanf(opt, "%" LTTNG_SYMBOL_NAME_LEN_SCANF_IS_A_BROKEN_API "s", name);
                if (match == 1) {
                        strncpy(ev->attr.probe.symbol_name, name, LTTNG_SYMBOL_NAME_LEN);
                        ev->attr.probe.symbol_name[LTTNG_SYMBOL_NAME_LEN - 1] = '\0';
@@ -163,7 +170,7 @@ static int parse_probe_opts(struct lttng_event *ev, char *opt)
                        ret = CMD_ERROR;
                        goto end;
                }
-               ev->attr.probe.addr = strtoull(s_hex, NULL, 0);
+               ev->attr.probe.addr = strtoull(s_hex, nullptr, 0);
                DBG("probe addr %" PRIu64, ev->attr.probe.addr);
                ev->attr.probe.offset = 0;
                memset(ev->attr.probe.symbol_name, 0, LTTNG_SYMBOL_NAME_LEN);
@@ -177,23 +184,20 @@ end:
        return ret;
 }
 
-static
-const char *print_channel_name(const char *name)
+static const char *print_channel_name(const char *name)
 {
-       return name ? : DEFAULT_CHANNEL_NAME;
+       return name ?: DEFAULT_CHANNEL_NAME;
 }
 
-static
-const char *print_raw_channel_name(const char *name)
+static const char *print_raw_channel_name(const char *name)
 {
-       return name ? : "<default>";
+       return name ?: "<default>";
 }
 
 /*
  * Mi print exlcusion list
  */
-static
-int mi_print_exclusion(const struct lttng_dynamic_pointer_array *exclusions)
+static int mi_print_exclusion(const struct lttng_dynamic_pointer_array *exclusions)
 {
        int ret;
        size_t i;
@@ -212,11 +216,11 @@ int mi_print_exclusion(const struct lttng_dynamic_pointer_array *exclusions)
        }
 
        for (i = 0; i < count; i++) {
-               const char *exclusion = (const char *) lttng_dynamic_pointer_array_get_pointer(
-                               exclusions, i);
+               const char *exclusion =
+                       (const char *) lttng_dynamic_pointer_array_get_pointer(exclusions, i);
 
-               ret = mi_lttng_writer_write_element_string(writer,
-                               config_element_exclusion, exclusion);
+               ret = mi_lttng_writer_write_element_string(
+                       writer, config_element_exclusion, exclusion);
                if (ret) {
                        goto end;
                }
@@ -232,8 +236,7 @@ end:
 /*
  * Return allocated string for pretty-printing exclusion names.
  */
-static
-char *print_exclusions(const struct lttng_dynamic_pointer_array *exclusions)
+static char *print_exclusions(const struct lttng_dynamic_pointer_array *exclusions)
 {
        int length = 0;
        size_t i;
@@ -247,22 +250,22 @@ char *print_exclusions(const struct lttng_dynamic_pointer_array *exclusions)
 
        /* Calculate total required length. */
        for (i = 0; i < count; i++) {
-               const char *exclusion = (const char *) lttng_dynamic_pointer_array_get_pointer(
-                               exclusions, i);
+               const char *exclusion =
+                       (const char *) lttng_dynamic_pointer_array_get_pointer(exclusions, i);
 
                length += strlen(exclusion) + 4;
        }
 
        length += sizeof(preamble);
-       ret = (char *) zmalloc(length);
+       ret = calloc<char>(length);
        if (!ret) {
-               return NULL;
+               return nullptr;
        }
 
        strncpy(ret, preamble, length);
        for (i = 0; i < count; i++) {
-               const char *exclusion = (const char *) lttng_dynamic_pointer_array_get_pointer(
-                               exclusions, i);
+               const char *exclusion =
+                       (const char *) lttng_dynamic_pointer_array_get_pointer(exclusions, i);
 
                strcat(ret, "\"");
                strcat(ret, exclusion);
@@ -275,8 +278,7 @@ char *print_exclusions(const struct lttng_dynamic_pointer_array *exclusions)
        return ret;
 }
 
-static
-int check_exclusion_subsets(const char *event_name, const char *exclusion)
+static int check_exclusion_subsets(const char *event_name, const char *exclusion)
 {
        bool warn = false;
        int ret = 0;
@@ -299,7 +301,9 @@ int check_exclusion_subsets(const char *event_name, const char *exclusion)
                if (*x == '*') {
                        /* Event is a subset of the excluder */
                        ERR("Event %s: %s excludes all events from %s",
-                               event_name, exclusion, event_name);
+                           event_name,
+                           exclusion,
+                           event_name);
                        goto error;
                }
 
@@ -311,7 +315,7 @@ int check_exclusion_subsets(const char *event_name, const char *exclusion)
                        goto end;
                }
 
-cmp_chars:
+       cmp_chars:
                if (*x != *e) {
                        warn = true;
                        break;
@@ -329,21 +333,22 @@ error:
 end:
        if (warn) {
                WARN("Event %s: %s does not exclude any events from %s",
-                       event_name, exclusion, event_name);
+                    event_name,
+                    exclusion,
+                    event_name);
        }
 
        return ret;
 }
 
 int validate_exclusion_list(const char *event_name,
-               const struct lttng_dynamic_pointer_array *exclusions)
+                           const struct lttng_dynamic_pointer_array *exclusions)
 {
        int ret;
 
        /* Event name must be a valid globbing pattern to allow exclusions. */
        if (!strutils_is_star_glob_pattern(event_name)) {
-               ERR("Event %s: Exclusions can only be used with a globbing pattern",
-                       event_name);
+               ERR("Event %s: Exclusions can only be used with a globbing pattern", event_name);
                goto error;
        }
 
@@ -359,11 +364,11 @@ int validate_exclusion_list(const char *event_name,
 
                for (i = 0; i < num_exclusions; i++) {
                        const char *exclusion =
-                                       (const char *) lttng_dynamic_pointer_array_get_pointer(
-                                                       exclusions, i);
+                               (const char *) lttng_dynamic_pointer_array_get_pointer(exclusions,
+                                                                                      i);
 
                        if (!strutils_is_star_glob_pattern(exclusion) ||
-                                       strutils_is_star_at_the_end_only_glob_pattern(exclusion)) {
+                           strutils_is_star_at_the_end_only_glob_pattern(exclusion)) {
                                ret = check_exclusion_subsets(event_name, exclusion);
                                if (ret) {
                                        goto error;
@@ -383,8 +388,8 @@ end:
 }
 
 static int create_exclusion_list_and_validate(const char *event_name,
-               const char *exclusions_arg,
-               struct lttng_dynamic_pointer_array *exclusions)
+                                             const char *exclusions_arg,
+                                             struct lttng_dynamic_pointer_array *exclusions)
 {
        int ret = 0;
 
@@ -394,8 +399,7 @@ static int create_exclusion_list_and_validate(const char *event_name,
                goto error;
        }
 
-       if (validate_exclusion_list(event_name, exclusions) !=
-                       0) {
+       if (validate_exclusion_list(event_name, exclusions) != 0) {
                goto error;
        }
 
@@ -410,17 +414,17 @@ end:
 }
 
 static void warn_on_truncated_exclusion_names(const struct lttng_dynamic_pointer_array *exclusions,
-       int *warn)
+                                             int *warn)
 {
        size_t i;
        const size_t num_exclusions = lttng_dynamic_pointer_array_get_count(exclusions);
 
        for (i = 0; i < num_exclusions; i++) {
-               const char * const exclusion = (const char *) lttng_dynamic_pointer_array_get_pointer(exclusions, i);
+               const char *const exclusion =
+                       (const char *) lttng_dynamic_pointer_array_get_pointer(exclusions, i);
 
                if (strlen(exclusion) >= LTTNG_SYMBOL_NAME_LEN) {
-                       WARN("Event exclusion \"%s\" will be truncated",
-                                       exclusion);
+                       WARN("Event exclusion \"%s\" will be truncated", exclusion);
                        *warn = 1;
                }
        }
@@ -430,17 +434,17 @@ static void warn_on_truncated_exclusion_names(const struct lttng_dynamic_pointer
  * Enabling event using the lttng API.
  * Note: in case of error only the last error code will be return.
  */
-static int enable_events(char *session_name)
+static int enable_events(char *session_name, char *event_list)
 {
        int ret = CMD_SUCCESS, command_ret = CMD_SUCCESS;
        int error_holder = CMD_SUCCESS, warn = 0, error = 0, success = 1;
-       char *event_name, *channel_name = NULL;
+       char *event_name, *channel_name = nullptr;
        struct lttng_event *ev;
        struct lttng_domain dom = {};
        struct lttng_dynamic_pointer_array exclusions;
-       struct lttng_userspace_probe_location *uprobe_loc = NULL;
+       struct lttng_userspace_probe_location *uprobe_loc = nullptr;
 
-       lttng_dynamic_pointer_array_init(&exclusions, NULL);
+       lttng_dynamic_pointer_array_init(&exclusions, nullptr);
 
        ev = lttng_event_create();
        if (!ev) {
@@ -486,7 +490,7 @@ static int enable_events(char *session_name)
                case LTTNG_DOMAIN_LOG4J:
                case LTTNG_DOMAIN_PYTHON:
                        ERR("Event name exclusions are not yet implemented for %s events",
-                                       lttng_domain_type_str(dom.type));
+                           lttng_domain_type_str(dom.type));
                        ret = CMD_ERROR;
                        goto error;
                case LTTNG_DOMAIN_UST:
@@ -512,7 +516,7 @@ static int enable_events(char *session_name)
                case LTTNG_EVENT_USERSPACE_PROBE:
                case LTTNG_EVENT_FUNCTION:
                        ERR("Filter expressions are not supported for %s events",
-                                       get_event_type_str((lttng_event_type) opt_event_type));
+                           get_event_type_str((lttng_event_type) opt_event_type));
                        ret = CMD_ERROR;
                        goto error;
                default:
@@ -524,7 +528,7 @@ static int enable_events(char *session_name)
        channel_name = opt_channel_name;
 
        handle = lttng_create_handle(session_name, &dom);
-       if (handle == NULL) {
+       if (handle == nullptr) {
                ret = -1;
                goto error;
        }
@@ -558,23 +562,27 @@ static int enable_events(char *session_name)
                                if (opt_userspace) {
                                        enum lttng_loglevel loglevel;
 
-                                       name_search_ret = loglevel_name_to_value(opt_loglevel, &loglevel);
+                                       name_search_ret =
+                                               loglevel_name_to_value(opt_loglevel, &loglevel);
                                        ev->loglevel = (int) loglevel;
                                } else if (opt_jul) {
                                        enum lttng_loglevel_jul loglevel;
 
-                                       name_search_ret = loglevel_jul_name_to_value(opt_loglevel, &loglevel);
+                                       name_search_ret =
+                                               loglevel_jul_name_to_value(opt_loglevel, &loglevel);
                                        ev->loglevel = (int) loglevel;
                                } else if (opt_log4j) {
                                        enum lttng_loglevel_log4j loglevel;
 
-                                       name_search_ret = loglevel_log4j_name_to_value(opt_loglevel, &loglevel);
+                                       name_search_ret = loglevel_log4j_name_to_value(opt_loglevel,
+                                                                                      &loglevel);
                                        ev->loglevel = (int) loglevel;
                                } else {
                                        /* python domain. */
                                        enum lttng_loglevel_python loglevel;
 
-                                       name_search_ret = loglevel_python_name_to_value(opt_loglevel, &loglevel);
+                                       name_search_ret = loglevel_python_name_to_value(
+                                               opt_loglevel, &loglevel);
                                        ev->loglevel = (int) loglevel;
                                }
 
@@ -598,47 +606,49 @@ static int enable_events(char *session_name)
                }
 
                if (opt_exclude) {
-                       ret = create_exclusion_list_and_validate("*",
-                               opt_exclude, &exclusions);
+                       ret = create_exclusion_list_and_validate("*", opt_exclude, &exclusions);
                        if (ret) {
                                ret = CMD_ERROR;
                                goto error;
                        }
 
                        ev->exclusion = 1;
-                       warn_on_truncated_exclusion_names(&exclusions,
-                               &warn);
+                       warn_on_truncated_exclusion_names(&exclusions, &warn);
                }
                if (!opt_filter) {
-                       ret = lttng_enable_event_with_exclusions(handle,
-                                       ev, channel_name,
-                                       NULL,
-                                       lttng_dynamic_pointer_array_get_count(&exclusions),
-                                       (char **) exclusions.array.buffer.data);
+                       ret = lttng_enable_event_with_exclusions(
+                               handle,
+                               ev,
+                               channel_name,
+                               nullptr,
+                               lttng_dynamic_pointer_array_get_count(&exclusions),
+                               (char **) exclusions.array.buffer.data);
                        if (ret < 0) {
                                switch (-ret) {
                                case LTTNG_ERR_KERN_EVENT_EXIST:
                                        WARN("Kernel events already enabled (channel %s, session %s)",
-                                                       print_channel_name(channel_name), session_name);
+                                            print_channel_name(channel_name),
+                                            session_name);
                                        warn = 1;
                                        break;
                                case LTTNG_ERR_TRACE_ALREADY_STARTED:
                                {
-                                       const char *msg = "The command tried to enable an event in a new domain for a session that has already been started once.";
+                                       const char *msg =
+                                               "The command tried to enable an event in a new domain for a session that has already been started once.";
                                        ERR("Events: %s (channel %s, session %s)",
-                                                       msg,
-                                                       print_channel_name(channel_name),
-                                                       session_name);
+                                           msg,
+                                           print_channel_name(channel_name),
+                                           session_name);
                                        error = 1;
                                        break;
                                }
                                default:
                                        ERR("Events: %s (channel %s, session %s)",
-                                                       lttng_strerror(ret),
-                                                       ret == -LTTNG_ERR_NEED_CHANNEL_NAME
-                                                               ? print_raw_channel_name(channel_name)
-                                                               : print_channel_name(channel_name),
-                                                       session_name);
+                                           lttng_strerror(ret),
+                                           ret == -LTTNG_ERR_NEED_CHANNEL_NAME ?
+                                                   print_raw_channel_name(channel_name) :
+                                                   print_channel_name(channel_name),
+                                           session_name);
                                        error = 1;
                                        break;
                                }
@@ -656,10 +666,10 @@ static int enable_events(char *session_name)
                                                goto end;
                                        }
                                        MSG("All %s tracepoints%s are enabled in channel %s for loglevel %s",
-                                                       lttng_domain_type_str(dom.type),
-                                                       exclusion_string,
-                                                       print_channel_name(channel_name),
-                                                       opt_loglevel);
+                                           lttng_domain_type_str(dom.type),
+                                           exclusion_string,
+                                           print_channel_name(channel_name),
+                                           opt_loglevel);
                                        free(exclusion_string);
                                } else {
                                        char *exclusion_string = print_exclusions(&exclusions);
@@ -670,17 +680,17 @@ static int enable_events(char *session_name)
                                                goto end;
                                        }
                                        MSG("All %s tracepoints%s are enabled in channel %s",
-                                                       lttng_domain_type_str(dom.type),
-                                                       exclusion_string,
-                                                       print_channel_name(channel_name));
+                                           lttng_domain_type_str(dom.type),
+                                           exclusion_string,
+                                           print_channel_name(channel_name));
                                        free(exclusion_string);
                                }
                                break;
                        case LTTNG_EVENT_SYSCALL:
                                if (opt_kernel) {
                                        MSG("All %s system calls are enabled in channel %s",
-                                                       lttng_domain_type_str(dom.type),
-                                                       print_channel_name(channel_name));
+                                           lttng_domain_type_str(dom.type),
+                                           print_channel_name(channel_name));
                                }
                                break;
                        case LTTNG_EVENT_ALL:
@@ -693,10 +703,10 @@ static int enable_events(char *session_name)
                                                goto end;
                                        }
                                        MSG("All %s events%s are enabled in channel %s for loglevel %s",
-                                                       lttng_domain_type_str(dom.type),
-                                                       exclusion_string,
-                                                       print_channel_name(channel_name),
-                                                       opt_loglevel);
+                                           lttng_domain_type_str(dom.type),
+                                           exclusion_string,
+                                           print_channel_name(channel_name),
+                                           opt_loglevel);
                                        free(exclusion_string);
                                } else {
                                        char *exclusion_string = print_exclusions(&exclusions);
@@ -707,9 +717,9 @@ static int enable_events(char *session_name)
                                                goto end;
                                        }
                                        MSG("All %s events%s are enabled in channel %s",
-                                                       lttng_domain_type_str(dom.type),
-                                                       exclusion_string,
-                                                       print_channel_name(channel_name));
+                                           lttng_domain_type_str(dom.type),
+                                           exclusion_string,
+                                           print_channel_name(channel_name));
                                        free(exclusion_string);
                                }
                                break;
@@ -723,35 +733,42 @@ static int enable_events(char *session_name)
                }
 
                if (opt_filter) {
-                       command_ret = lttng_enable_event_with_exclusions(handle, ev, channel_name,
-                                       opt_filter,
-                                       lttng_dynamic_pointer_array_get_count(&exclusions),
-                                       (char **) exclusions.array.buffer.data);
+                       command_ret = lttng_enable_event_with_exclusions(
+                               handle,
+                               ev,
+                               channel_name,
+                               opt_filter,
+                               lttng_dynamic_pointer_array_get_count(&exclusions),
+                               (char **) exclusions.array.buffer.data);
                        if (command_ret < 0) {
                                switch (-command_ret) {
                                case LTTNG_ERR_FILTER_EXIST:
                                        WARN("Filter on all events is already enabled"
-                                                       " (channel %s, session %s)",
-                                               print_channel_name(channel_name), session_name);
+                                            " (channel %s, session %s)",
+                                            print_channel_name(channel_name),
+                                            session_name);
                                        warn = 1;
                                        break;
                                case LTTNG_ERR_TRACE_ALREADY_STARTED:
                                {
-                                       const char *msg = "The command tried to enable an event in a new domain for a session that has already been started once.";
+                                       const char *msg =
+                                               "The command tried to enable an event in a new domain for a session that has already been started once.";
                                        ERR("All events: %s (channel %s, session %s, filter \'%s\')",
-                                                       msg,
-                                                       print_channel_name(channel_name),
-                                                       session_name, opt_filter);
+                                           msg,
+                                           print_channel_name(channel_name),
+                                           session_name,
+                                           opt_filter);
                                        error = 1;
                                        break;
                                }
                                default:
                                        ERR("All events: %s (channel %s, session %s, filter \'%s\')",
-                                                       lttng_strerror(command_ret),
-                                                       command_ret == -LTTNG_ERR_NEED_CHANNEL_NAME
-                                                               ? print_raw_channel_name(channel_name)
-                                                               : print_channel_name(channel_name),
-                                                       session_name, opt_filter);
+                                           lttng_strerror(command_ret),
+                                           command_ret == -LTTNG_ERR_NEED_CHANNEL_NAME ?
+                                                   print_raw_channel_name(channel_name) :
+                                                   print_channel_name(channel_name),
+                                           session_name,
+                                           opt_filter);
                                        error = 1;
                                        break;
                                }
@@ -793,8 +810,8 @@ static int enable_events(char *session_name)
                        }
 
                        /* Success ? */
-                       ret = mi_lttng_writer_write_element_bool(writer,
-                                       mi_lttng_element_command_success, success);
+                       ret = mi_lttng_writer_write_element_bool(
+                               writer, mi_lttng_element_command_success, success);
                        if (ret) {
                                ret = CMD_ERROR;
                                goto error;
@@ -812,8 +829,8 @@ static int enable_events(char *session_name)
        }
 
        /* Strip event list */
-       event_name = strtok(opt_event_list, ",");
-       while (event_name != NULL) {
+       event_name = strtok(event_list, ",");
+       while (event_name != nullptr) {
                /* Copy name and type of the event */
                strncpy(ev->name, event_name, LTTNG_SYMBOL_NAME_LEN);
                ev->name[LTTNG_SYMBOL_NAME_LEN - 1] = '\0';
@@ -822,11 +839,11 @@ static int enable_events(char *session_name)
                /* Kernel tracer action */
                if (opt_kernel) {
                        DBG("Enabling kernel event %s for channel %s",
-                                       event_name,
-                                       print_channel_name(channel_name));
+                           event_name,
+                           print_channel_name(channel_name));
 
                        switch (opt_event_type) {
-                       case LTTNG_EVENT_ALL:   /* Enable tracepoints and syscalls */
+                       case LTTNG_EVENT_ALL: /* Enable tracepoints and syscalls */
                                /* If event name differs from *, select tracepoint. */
                                if (strcmp(ev->name, "*")) {
                                        ev->type = LTTNG_EVENT_TRACEPOINT;
@@ -871,7 +888,7 @@ static int enable_events(char *session_name)
                                }
 
                                /* Ownership of the uprobe location was transferred to the event. */
-                               uprobe_loc = NULL;
+                               uprobe_loc = nullptr;
                                break;
                        case LTTNG_EVENT_FUNCTION:
                                ret = parse_probe_opts(ev, opt_function);
@@ -891,12 +908,14 @@ static int enable_events(char *session_name)
 
                        /* kernel loglevels not implemented */
                        ev->loglevel_type = LTTNG_EVENT_LOGLEVEL_ALL;
-               } else if (opt_userspace) {             /* User-space tracer action */
-                       DBG("Enabling UST event %s for channel %s, loglevel %s", event_name,
-                                       print_channel_name(channel_name), opt_loglevel ? : "<all>");
+               } else if (opt_userspace) { /* User-space tracer action */
+                       DBG("Enabling UST event %s for channel %s, loglevel %s",
+                           event_name,
+                           print_channel_name(channel_name),
+                           opt_loglevel ?: "<all>");
 
                        switch (opt_event_type) {
-                       case LTTNG_EVENT_ALL:   /* Default behavior is tracepoint */
+                       case LTTNG_EVENT_ALL: /* Default behavior is tracepoint */
                                /* Fall-through */
                        case LTTNG_EVENT_TRACEPOINT:
                                /* Copy name and type of the event */
@@ -916,7 +935,8 @@ static int enable_events(char *session_name)
 
                        if (opt_exclude) {
                                ev->exclusion = 1;
-                               if (opt_event_type != LTTNG_EVENT_ALL && opt_event_type != LTTNG_EVENT_TRACEPOINT) {
+                               if (opt_event_type != LTTNG_EVENT_ALL &&
+                                   opt_event_type != LTTNG_EVENT_TRACEPOINT) {
                                        ERR("Exclusion option can only be used with tracepoint events");
                                        ret = CMD_ERROR;
                                        goto error;
@@ -924,21 +944,20 @@ static int enable_events(char *session_name)
                                /* Free previously allocated items. */
                                lttng_dynamic_pointer_array_reset(&exclusions);
                                ret = create_exclusion_list_and_validate(
-                                       event_name, opt_exclude,
-                                       &exclusions);
+                                       event_name, opt_exclude, &exclusions);
                                if (ret) {
                                        ret = CMD_ERROR;
                                        goto error;
                                }
 
-                               warn_on_truncated_exclusion_names(
-                                       &exclusions, &warn);
+                               warn_on_truncated_exclusion_names(&exclusions, &warn);
                        }
 
                        ev->loglevel_type = (lttng_loglevel_type) opt_loglevel_type;
                        if (opt_loglevel) {
                                enum lttng_loglevel loglevel;
-                               const int name_search_ret = loglevel_name_to_value(opt_loglevel, &loglevel);
+                               const int name_search_ret =
+                                       loglevel_name_to_value(opt_loglevel, &loglevel);
 
                                if (name_search_ret == -1) {
                                        ERR("Unknown loglevel %s", opt_loglevel);
@@ -952,7 +971,7 @@ static int enable_events(char *session_name)
                        }
                } else if (opt_jul || opt_log4j || opt_python) {
                        if (opt_event_type != LTTNG_EVENT_ALL &&
-                                       opt_event_type != LTTNG_EVENT_TRACEPOINT) {
+                           opt_event_type != LTTNG_EVENT_TRACEPOINT) {
                                ERR("Event type not supported for domain.");
                                ret = CMD_UNSUPPORTED;
                                goto error;
@@ -965,18 +984,21 @@ static int enable_events(char *session_name)
                                if (opt_jul) {
                                        enum lttng_loglevel_jul loglevel;
 
-                                       name_search_ret = loglevel_jul_name_to_value(opt_loglevel, &loglevel);
+                                       name_search_ret =
+                                               loglevel_jul_name_to_value(opt_loglevel, &loglevel);
                                        ev->loglevel = (int) loglevel;
                                } else if (opt_log4j) {
                                        enum lttng_loglevel_log4j loglevel;
 
-                                       name_search_ret = loglevel_log4j_name_to_value(opt_loglevel, &loglevel);
+                                       name_search_ret = loglevel_log4j_name_to_value(opt_loglevel,
+                                                                                      &loglevel);
                                        ev->loglevel = (int) loglevel;
                                } else {
                                        /* python domain. */
                                        enum lttng_loglevel_python loglevel;
 
-                                       name_search_ret = loglevel_python_name_to_value(opt_loglevel, &loglevel);
+                                       name_search_ret = loglevel_python_name_to_value(
+                                               opt_loglevel, &loglevel);
                                        ev->loglevel = (int) loglevel;
                                }
 
@@ -1004,11 +1026,13 @@ static int enable_events(char *session_name)
                if (!opt_filter) {
                        char *exclusion_string;
 
-                       command_ret = lttng_enable_event_with_exclusions(handle,
-                                       ev, channel_name,
-                                       NULL,
-                                       lttng_dynamic_pointer_array_get_count(&exclusions),
-                                       (char **) exclusions.array.buffer.data);
+                       command_ret = lttng_enable_event_with_exclusions(
+                               handle,
+                               ev,
+                               channel_name,
+                               nullptr,
+                               lttng_dynamic_pointer_array_get_count(&exclusions),
+                               (char **) exclusions.array.buffer.data);
                        exclusion_string = print_exclusions(&exclusions);
                        if (!exclusion_string) {
                                PERROR("Cannot allocate exclusion_string");
@@ -1020,36 +1044,41 @@ static int enable_events(char *session_name)
                                switch (-command_ret) {
                                case LTTNG_ERR_KERN_EVENT_EXIST:
                                        WARN("Kernel event %s%s already enabled (channel %s, session %s)",
-                                                       event_name,
-                                                       exclusion_string,
-                                                       print_channel_name(channel_name), session_name);
+                                            event_name,
+                                            exclusion_string,
+                                            print_channel_name(channel_name),
+                                            session_name);
                                        warn = 1;
                                        break;
                                case LTTNG_ERR_TRACE_ALREADY_STARTED:
                                {
-                                       const char *msg = "The command tried to enable an event in a new domain for a session that has already been started once.";
-                                       ERR("Event %s%s: %s (channel %s, session %s)", event_name,
-                                                       exclusion_string,
-                                                       msg,
-                                                       print_channel_name(channel_name),
-                                                       session_name);
+                                       const char *msg =
+                                               "The command tried to enable an event in a new domain for a session that has already been started once.";
+                                       ERR("Event %s%s: %s (channel %s, session %s)",
+                                           event_name,
+                                           exclusion_string,
+                                           msg,
+                                           print_channel_name(channel_name),
+                                           session_name);
                                        error = 1;
                                        break;
                                }
                                case LTTNG_ERR_SDT_PROBE_SEMAPHORE:
                                        ERR("SDT probes %s guarded by semaphores are not supported (channel %s, session %s)",
-                                                       event_name, print_channel_name(channel_name),
-                                                       session_name);
+                                           event_name,
+                                           print_channel_name(channel_name),
+                                           session_name);
                                        error = 1;
                                        break;
                                default:
-                                       ERR("Event %s%s: %s (channel %s, session %s)", event_name,
-                                                       exclusion_string,
-                                                       lttng_strerror(command_ret),
-                                                       command_ret == -LTTNG_ERR_NEED_CHANNEL_NAME
-                                                               ? print_raw_channel_name(channel_name)
-                                                               : print_channel_name(channel_name),
-                                                       session_name);
+                                       ERR("Event %s%s: %s (channel %s, session %s)",
+                                           event_name,
+                                           exclusion_string,
+                                           lttng_strerror(command_ret),
+                                           command_ret == -LTTNG_ERR_NEED_CHANNEL_NAME ?
+                                                   print_raw_channel_name(channel_name) :
+                                                   print_channel_name(channel_name),
+                                           session_name);
                                        error = 1;
                                        break;
                                }
@@ -1059,10 +1088,10 @@ static int enable_events(char *session_name)
                                case LTTNG_DOMAIN_KERNEL:
                                case LTTNG_DOMAIN_UST:
                                        MSG("%s event %s%s created in channel %s",
-                                               lttng_domain_type_str(dom.type),
-                                               event_name,
-                                               exclusion_string,
-                                               print_channel_name(channel_name));
+                                           lttng_domain_type_str(dom.type),
+                                           event_name,
+                                           exclusion_string,
+                                           print_channel_name(channel_name));
                                        break;
                                case LTTNG_DOMAIN_JUL:
                                case LTTNG_DOMAIN_LOG4J:
@@ -1072,9 +1101,9 @@ static int enable_events(char *session_name)
                                         * name for agent domains.
                                         */
                                        MSG("%s event %s%s enabled",
-                                               lttng_domain_type_str(dom.type),
-                                               event_name,
-                                               exclusion_string);
+                                           lttng_domain_type_str(dom.type),
+                                           event_name,
+                                           exclusion_string);
                                        break;
                                default:
                                        abort();
@@ -1089,10 +1118,13 @@ static int enable_events(char *session_name)
                        /* Filter present */
                        ev->filter = 1;
 
-                       command_ret = lttng_enable_event_with_exclusions(handle, ev, channel_name,
-                                       opt_filter,
-                                       lttng_dynamic_pointer_array_get_count(&exclusions),
-                                       (char **) exclusions.array.buffer.data);
+                       command_ret = lttng_enable_event_with_exclusions(
+                               handle,
+                               ev,
+                               channel_name,
+                               opt_filter,
+                               lttng_dynamic_pointer_array_get_count(&exclusions),
+                               (char **) exclusions.array.buffer.data);
                        exclusion_string = print_exclusions(&exclusions);
                        if (!exclusion_string) {
                                PERROR("Cannot allocate exclusion_string");
@@ -1103,31 +1135,37 @@ static int enable_events(char *session_name)
                                switch (-command_ret) {
                                case LTTNG_ERR_FILTER_EXIST:
                                        WARN("Filter on event %s%s is already enabled"
-                                                       " (channel %s, session %s)",
-                                               event_name,
-                                               exclusion_string,
-                                               print_channel_name(channel_name), session_name);
+                                            " (channel %s, session %s)",
+                                            event_name,
+                                            exclusion_string,
+                                            print_channel_name(channel_name),
+                                            session_name);
                                        warn = 1;
                                        break;
                                case LTTNG_ERR_TRACE_ALREADY_STARTED:
                                {
-                                       const char *msg = "The command tried to enable an event in a new domain for a session that has already been started once.";
-                                       ERR("Event %s%s: %s (channel %s, session %s, filter \'%s\')", ev->name,
-                                                       exclusion_string,
-                                                       msg,
-                                                       print_channel_name(channel_name),
-                                                       session_name, opt_filter);
+                                       const char *msg =
+                                               "The command tried to enable an event in a new domain for a session that has already been started once.";
+                                       ERR("Event %s%s: %s (channel %s, session %s, filter \'%s\')",
+                                           ev->name,
+                                           exclusion_string,
+                                           msg,
+                                           print_channel_name(channel_name),
+                                           session_name,
+                                           opt_filter);
                                        error = 1;
                                        break;
                                }
                                default:
-                                       ERR("Event %s%s: %s (channel %s, session %s, filter \'%s\')", ev->name,
-                                                       exclusion_string,
-                                                       lttng_strerror(command_ret),
-                                                       command_ret == -LTTNG_ERR_NEED_CHANNEL_NAME
-                                                               ? print_raw_channel_name(channel_name)
-                                                               : print_channel_name(channel_name),
-                                                       session_name, opt_filter);
+                                       ERR("Event %s%s: %s (channel %s, session %s, filter \'%s\')",
+                                           ev->name,
+                                           exclusion_string,
+                                           lttng_strerror(command_ret),
+                                           command_ret == -LTTNG_ERR_NEED_CHANNEL_NAME ?
+                                                   print_raw_channel_name(channel_name) :
+                                                   print_channel_name(channel_name),
+                                           session_name,
+                                           opt_filter);
                                        error = 1;
                                        break;
                                }
@@ -1135,8 +1173,9 @@ static int enable_events(char *session_name)
 
                        } else {
                                MSG("Event %s%s: Filter '%s' successfully set",
-                                               event_name, exclusion_string,
-                                               opt_filter);
+                                   event_name,
+                                   exclusion_string,
+                                   opt_filter);
                        }
                        free(exclusion_string);
                }
@@ -1163,8 +1202,8 @@ static int enable_events(char *session_name)
                        }
 
                        /* Success ? */
-                       ret = mi_lttng_writer_write_element_bool(writer,
-                                       mi_lttng_element_command_success, success);
+                       ret = mi_lttng_writer_write_element_bool(
+                               writer, mi_lttng_element_command_success, success);
                        if (ret) {
                                ret = CMD_ERROR;
                                goto end;
@@ -1179,7 +1218,7 @@ static int enable_events(char *session_name)
                }
 
                /* Next event */
-               event_name = strtok(NULL, ",");
+               event_name = strtok(nullptr, ",");
                /* Reset warn, error and success */
                success = 1;
        }
@@ -1221,11 +1260,13 @@ int cmd_enable_events(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 *event_list = nullptr;
+       const char *arg_event_list = nullptr;
+       const char *leftover = nullptr;
        int event_type = -1;
 
-       pc = poptGetContext(NULL, argc, argv, long_options, 0);
+       pc = poptGetContext(nullptr, argc, argv, long_options, 0);
        poptReadDefaultConfig(pc, 0);
 
        /* Default event type */
@@ -1287,9 +1328,7 @@ int cmd_enable_events(int argc, const char **argv)
        }
 
        ret = print_missing_or_multiple_domains(
-                       opt_kernel + opt_userspace + opt_jul + opt_log4j +
-                                       opt_python,
-                       true);
+               opt_kernel + opt_userspace + opt_jul + opt_log4j + opt_python, true);
        if (ret) {
                ret = CMD_ERROR;
                goto end;
@@ -1304,29 +1343,36 @@ int cmd_enable_events(int argc, const char **argv)
                }
 
                /* Open command element */
-               ret = mi_lttng_writer_command_open(writer,
-                               mi_lttng_element_command_enable_event);
+               ret = mi_lttng_writer_command_open(writer, mi_lttng_element_command_enable_event);
                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;
                }
        }
 
-       opt_event_list = (char*) poptGetArg(pc);
-       if (opt_event_list == NULL && opt_enable_all == 0) {
-               ERR("Missing event name(s).\n");
+       arg_event_list = poptGetArg(pc);
+       if (arg_event_list == nullptr && opt_enable_all == 0) {
+               ERR("Missing event name(s).");
                ret = CMD_ERROR;
                goto end;
        }
 
+       if (opt_enable_all == 0) {
+               event_list = strdup(arg_event_list);
+               if (event_list == nullptr) {
+                       PERROR("Failed to copy event name(s)");
+                       ret = CMD_ERROR;
+                       goto end;
+               }
+       }
+
        leftover = poptGetArg(pc);
        if (leftover) {
                ERR("Unknown argument: %s", leftover);
@@ -1336,7 +1382,7 @@ int cmd_enable_events(int argc, const char **argv)
 
        if (!opt_session_name) {
                session_name = get_session_name();
-               if (session_name == NULL) {
+               if (session_name == nullptr) {
                        command_ret = CMD_ERROR;
                        success = 0;
                        goto mi_closing;
@@ -1345,7 +1391,7 @@ int cmd_enable_events(int argc, const char **argv)
                session_name = opt_session_name;
        }
 
-       command_ret = enable_events(session_name);
+       command_ret = enable_events(session_name, event_list);
        if (command_ret) {
                success = 0;
                goto mi_closing;
@@ -1361,8 +1407,8 @@ mi_closing:
                        goto end;
                }
 
-               ret = mi_lttng_writer_write_element_bool(writer,
-                               mi_lttng_element_command_success, success);
+               ret = mi_lttng_writer_write_element_bool(
+                       writer, mi_lttng_element_command_success, success);
                if (ret) {
                        ret = CMD_ERROR;
                        goto end;
@@ -1383,14 +1429,15 @@ end:
                ret = ret ? ret : LTTNG_ERR_MI_IO_FAIL;
        }
 
-       if (opt_session_name == NULL) {
+       if (opt_session_name == nullptr) {
                free(session_name);
        }
 
+       free(event_list);
+
        /* Overwrite ret if an error occurred in enable_events */
        ret = command_ret ? command_ret : ret;
 
        poptFreeContext(pc);
        return ret;
 }
-
This page took 0.039705 seconds and 4 git commands to generate.