Fix: intialization of ust_metadata_poll_pipe to garbage value
[lttng-tools.git] / src / bin / lttng / commands / list.c
index 44a4c44a364efaa9038984a867000419f94ce519..15f8a728d9e61f88d44e3030f73290f5bc35ca5b 100644 (file)
@@ -25,6 +25,7 @@
 #include <assert.h>
 
 #include <common/mi-lttng.h>
+#include <lttng/constant.h>
 
 #include "../command.h"
 
@@ -37,11 +38,6 @@ static char *opt_channel;
 static int opt_domain;
 static int opt_fields;
 static int opt_syscall;
-#if 0
-/* Not implemented yet */
-static char *opt_cmd_name;
-static pid_t opt_pid;
-#endif
 
 const char *indent4 = "    ";
 const char *indent6 = "      ";
@@ -58,22 +54,16 @@ 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},
-       {"kernel",    'k', POPT_ARG_VAL, &opt_kernel, 1, 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},
-#if 0
-       /* Not implemented yet */
-       {"userspace",      'u', POPT_ARG_STRING | POPT_ARGFLAG_OPTIONAL, &opt_cmd_name, OPT_USERSPACE, 0, 0},
-       {"pid",            'p', POPT_ARG_INT, &opt_pid, 0, 0, 0},
-#else
-       {"userspace",      'u', POPT_ARG_NONE, 0, OPT_USERSPACE, 0, 0},
-#endif
-       {"channel",   'c', POPT_ARG_STRING, &opt_channel, 0, 0, 0},
-       {"domain",    'd', POPT_ARG_VAL, &opt_domain, 1, 0, 0},
-       {"fields",    'f', POPT_ARG_VAL, &opt_fields, 1, 0, 0},
-       {"syscall",   'S', POPT_ARG_VAL, &opt_syscall, 1, 0, 0},
+       {"help",        'h', POPT_ARG_NONE, 0, OPT_HELP, 0, 0},
+       {"kernel",      'k', POPT_ARG_VAL, &opt_kernel, 1, 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},
+       {"userspace",   'u', POPT_ARG_NONE, 0, OPT_USERSPACE, 0, 0},
+       {"channel",     'c', POPT_ARG_STRING, &opt_channel, 0, 0, 0},
+       {"domain",      'd', POPT_ARG_VAL, &opt_domain, 1, 0, 0},
+       {"fields",      'f', POPT_ARG_VAL, &opt_fields, 1, 0, 0},
+       {"syscall",     'S', POPT_ARG_VAL, &opt_syscall, 1, 0, 0},
        {"list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, NULL, NULL},
        {0, 0, 0, 0, 0, 0, 0}
 };
@@ -99,9 +89,6 @@ static void usage(FILE *ofp)
        fprintf(ofp, "  -p, --python            Apply for Python application using logging\n");
        fprintf(ofp, "  -f, --fields            List event fields.\n");
        fprintf(ofp, "      --syscall           List available system calls.\n");
-#if 0
-       fprintf(ofp, "  -p, --pid PID           List user-space events by PID\n");
-#endif
        fprintf(ofp, "\n");
        fprintf(ofp, "Session Options:\n");
        fprintf(ofp, "  -c, --channel NAME      List details of a channel\n");
@@ -120,7 +107,8 @@ static char *get_cmdline_by_pid(pid_t pid)
        int ret;
        FILE *fp = NULL;
        char *cmdline = NULL;
-       char path[20];  /* Can't go bigger than /proc/65535/cmdline */
+       /* Can't go bigger than /proc/LTTNG_MAX_PID/cmdline */
+       char path[sizeof("/proc//cmdline") + sizeof(LTTNG_MAX_PID_STR) - 1];
 
        snprintf(path, sizeof(path), "/proc/%d/cmdline", pid);
        fp = fopen(path, "r");
@@ -361,7 +349,7 @@ static int mi_list_agent_ust_events(struct lttng_event *events, int count,
        for (i = 0; i < count; i++) {
                if (cur_pid != events[i].pid) {
                        if (pid_element_open) {
-                               /* Close the previous events and  pid element */
+                               /* Close the previous events and pid element */
                                ret = mi_lttng_close_multi_element(writer, 2);
                                if (ret) {
                                        goto end;
@@ -420,8 +408,8 @@ static int list_agent_events(void)
 {
        int i, size, ret = CMD_SUCCESS;
        struct lttng_domain domain;
-       struct lttng_handle *handle;
-       struct lttng_event *event_list;
+       struct lttng_handle *handle = NULL;
+       struct lttng_event *event_list = NULL;
        pid_t cur_pid = 0;
        char *cmdline = NULL;
        const char *agent_domain_str;
@@ -433,6 +421,10 @@ static int list_agent_events(void)
                domain.type = LTTNG_DOMAIN_LOG4J;
        } else if (opt_python) {
                domain.type = LTTNG_DOMAIN_PYTHON;
+       } else {
+               ERR("Invalid agent domain selected.");
+               ret = CMD_ERROR;
+               goto error;
        }
 
        agent_domain_str = get_domain_str(domain.type);
This page took 0.02633 seconds and 5 git commands to generate.