Fix: lttng: incorrect domain list printed when no domain is provided
[lttng-tools.git] / src / bin / lttng / commands / enable_events.c
index 0c001fd9e7fb0cb0a4510858c1c8b78a311c03d1..ca9395fcad05e3924a989ee19b78b29987c1ac4f 100644 (file)
@@ -26,7 +26,7 @@
 #include <inttypes.h>
 #include <ctype.h>
 
-#include <src/common/sessiond-comm/sessiond-comm.h>
+#include <common/sessiond-comm/sessiond-comm.h>
 #include <common/compat/string.h>
 #include <common/string-utils/string-utils.h>
 
@@ -137,7 +137,7 @@ static int parse_probe_opts(struct lttng_event *ev, char *opt)
        }
 
        /* Check for symbol */
-       if (isalpha(name[0])) {
+       if (isalpha(name[0]) || name[0] == '_') {
                match = sscanf(opt, "%" LTTNG_SYMBOL_NAME_LEN_SCANF_IS_A_BROKEN_API "s",
                        name);
                if (match == 1) {
@@ -154,8 +154,13 @@ static int parse_probe_opts(struct lttng_event *ev, char *opt)
        /* Check for address */
        match = sscanf(opt, "%" S_HEX_LEN_SCANF_IS_A_BROKEN_API "s", s_hex);
        if (match > 0) {
-               if (*s_hex == '\0') {
-                       ERR("Invalid probe address %s", s_hex);
+               /*
+                * Return an error if the first character of the tentative
+                * address is NULL or not a digit. It can be "0" if the address
+                * is in hexadecimal and can be 1 to 9 if it's in decimal.
+                */
+               if (*s_hex == '\0' || !isdigit(*s_hex)) {
+                       ERR("Invalid probe description %s", s_hex);
                        ret = CMD_ERROR;
                        goto end;
                }
@@ -1264,6 +1269,7 @@ 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;
        int event_type = -1;
 
        pc = poptGetContext(NULL, argc, argv, long_options, 0);
@@ -1325,7 +1331,9 @@ 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);
+                       opt_kernel + opt_userspace + opt_jul + opt_log4j +
+                                       opt_python,
+                       true);
        if (ret) {
                ret = CMD_ERROR;
                goto end;
@@ -1363,6 +1371,13 @@ int cmd_enable_events(int argc, const char **argv)
                goto end;
        }
 
+       leftover = poptGetArg(pc);
+       if (leftover) {
+               ERR("Unknown argument: %s", leftover);
+               ret = CMD_ERROR;
+               goto end;
+       }
+
        if (!opt_session_name) {
                session_name = get_session_name();
                if (session_name == NULL) {
This page took 0.024375 seconds and 4 git commands to generate.