lttng: remove usage strings from commands
[lttng-tools.git] / src / bin / lttng / commands / enable_channels.c
index f8272e92270b5c582faa23cc01b46e04ba38eb24..9a990030d5023ff38f0b984f1329f32e5feb849f 100644 (file)
@@ -15,7 +15,6 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-#define _GNU_SOURCE
 #define _LGPL_SOURCE
 #include <popt.h>
 #include <stdio.h>
@@ -89,67 +88,6 @@ static struct poptOption long_options[] = {
        {0, 0, 0, 0, 0, 0, 0}
 };
 
-/*
- * usage
- */
-static void usage(FILE *ofp)
-{
-       fprintf(ofp, "usage: lttng enable-channel NAME[,NAME2,...] (-u | -k) [OPTIONS]\n");
-       fprintf(ofp, "\n");
-       fprintf(ofp, "Options:\n");
-       fprintf(ofp, "  -h, --help               Show this help\n");
-       fprintf(ofp, "      --list-options       Simple listing of options\n");
-       fprintf(ofp, "  -s, --session NAME       Apply to session name\n");
-       fprintf(ofp, "  -k, --kernel             Apply to the kernel tracer\n");
-       fprintf(ofp, "  -u, --userspace          Apply to the user-space tracer\n");
-       fprintf(ofp, "\n");
-       fprintf(ofp, "Channel options:\n");
-       fprintf(ofp, "      --discard            Discard event when buffers are full%s\n",
-               DEFAULT_CHANNEL_OVERWRITE ? "" : " (default)");
-       fprintf(ofp, "      --overwrite          Flight recorder mode%s\n",
-               DEFAULT_CHANNEL_OVERWRITE ? " (default)" : "");
-       fprintf(ofp, "      --subbuf-size SIZE   Subbuffer size in bytes {+k,+M,+G}\n");
-       fprintf(ofp, "                               (default UST uid: %zu, UST pid: %zu, kernel: %zu, metadata: %zu)\n",
-               default_get_ust_uid_channel_subbuf_size(),
-               default_get_ust_pid_channel_subbuf_size(),
-               default_get_kernel_channel_subbuf_size(),
-               default_get_metadata_subbuf_size());
-       fprintf(ofp, "                               Rounded up to the next power of 2.\n");
-       fprintf(ofp, "      --num-subbuf NUM     Number of subbufers\n");
-       fprintf(ofp, "                               (default UST uid: %u, UST pid: %u, kernel: %u, metadata: %u)\n",
-               DEFAULT_UST_UID_CHANNEL_SUBBUF_NUM, DEFAULT_UST_PID_CHANNEL_SUBBUF_NUM,
-               DEFAULT_KERNEL_CHANNEL_SUBBUF_NUM, DEFAULT_METADATA_SUBBUF_NUM);
-       fprintf(ofp, "                               Rounded up to the next power of 2.\n");
-       fprintf(ofp, "      --switch-timer USEC  Switch timer interval in usec\n");
-       fprintf(ofp, "                               (default UST uid: %u, UST pid: %u, kernel: %u, metadata: %u)\n",
-               DEFAULT_UST_UID_CHANNEL_SWITCH_TIMER, DEFAULT_UST_PID_CHANNEL_SWITCH_TIMER,
-               DEFAULT_KERNEL_CHANNEL_SWITCH_TIMER, DEFAULT_METADATA_SWITCH_TIMER);
-       fprintf(ofp, "      --read-timer USEC    Read timer interval in usec.\n");
-       fprintf(ofp, "                               (default UST uid: %u, UST pid: %u, kernel: %u, metadata: %u)\n",
-               DEFAULT_UST_UID_CHANNEL_READ_TIMER, DEFAULT_UST_UID_CHANNEL_READ_TIMER,
-               DEFAULT_KERNEL_CHANNEL_READ_TIMER, DEFAULT_METADATA_READ_TIMER);
-       fprintf(ofp, "      --output TYPE        Channel output type (Values: %s, %s)\n",
-                       output_mmap, output_splice);
-       fprintf(ofp, "                               (default UST uid: %s, UST pid: %s, kernel: %s, metadata: %s)\n",
-                       DEFAULT_UST_UID_CHANNEL_OUTPUT == LTTNG_EVENT_MMAP ? output_mmap : output_splice,
-                       DEFAULT_UST_PID_CHANNEL_OUTPUT == LTTNG_EVENT_MMAP ? output_mmap : output_splice,
-                       DEFAULT_KERNEL_CHANNEL_OUTPUT == LTTNG_EVENT_MMAP ? output_mmap : output_splice,
-                       DEFAULT_METADATA_OUTPUT == LTTNG_EVENT_MMAP ? output_mmap : output_splice);
-       fprintf(ofp, "      --buffers-uid        Use per UID buffer (-u only)\n");
-       fprintf(ofp, "      --buffers-pid        Use per PID buffer (-u only)\n");
-       fprintf(ofp, "      --buffers-global     Use shared buffer for the whole system (-k only)\n");
-       fprintf(ofp, "  -C, --tracefile-size SIZE\n");
-       fprintf(ofp, "                           Maximum size of each tracefile within a stream (in bytes). 0 means unlimited.\n");
-       fprintf(ofp, "                               (default: %u)\n", DEFAULT_CHANNEL_TRACEFILE_SIZE);
-       fprintf(ofp, "                           Note: traces generated with this option may inaccurately report\n");
-       fprintf(ofp, "                           discarded events as per CTF 1.8.\n");
-       fprintf(ofp, "  -W, --tracefile-count COUNT\n");
-       fprintf(ofp, "                           Used in conjunction with -C option, this will limit the number\n");
-       fprintf(ofp, "                           of files created to the specified count. 0 means unlimited.\n");
-       fprintf(ofp, "                               (default: %u)\n", DEFAULT_CHANNEL_TRACEFILE_COUNT);
-       fprintf(ofp, "\n");
-}
-
 /*
  * Set default attributes depending on those already defined from the command
  * line.
@@ -220,9 +158,8 @@ static int enable_channel(char *session_name)
                        dom.buf_type = LTTNG_BUFFER_PER_UID;
                }
        } else {
-               print_missing_domain();
-               ret = CMD_ERROR;
-               goto error;
+               /* Checked by the caller. */
+               assert(0);
        }
 
        set_default_attr(&dom);
@@ -250,7 +187,6 @@ static int enable_channel(char *session_name)
                } else {
                        ERR("Unknown output type %s. Possible values are: %s, %s\n",
                                        opt_output, output_mmap, output_splice);
-                       usage(stderr);
                        ret = CMD_ERROR;
                        goto error;
                }
@@ -275,9 +211,16 @@ static int enable_channel(char *session_name)
        /* Strip channel list (format: chan1,chan2,...) */
        channel_name = strtok(opt_channels, ",");
        while (channel_name != NULL) {
-               /* Copy channel name and normalize it */
-               strncpy(chan.name, channel_name, NAME_MAX);
-               chan.name[NAME_MAX - 1] = '\0';
+               /* Validate channel name's length */
+               if (strlen(channel_name) >= NAME_MAX) {
+                       ERR("Channel name is too long (max. %zu characters)",
+                                       sizeof(chan.name) - 1);
+                       error = 1;
+                       goto skip_enable;
+               }
+
+               /* Copy channel name */
+               strcpy(chan.name, channel_name);
 
                DBG("Enabling channel %s", channel_name);
 
@@ -292,6 +235,12 @@ static int enable_channel(char *session_name)
                                                lttng_strerror(ret), session_name);
                                warn = 1;
                                break;
+                       case LTTNG_ERR_INVALID_CHANNEL_NAME:
+                               ERR("Invalid channel name: \"%s\". "
+                                   "Channel names may not start with '.', and "
+                                   "may not contain '/'.", channel_name);
+                               error = 1;
+                               break;
                        default:
                                ERR("Channel %s: %s (session %s)", channel_name,
                                                lttng_strerror(ret), session_name);
@@ -304,6 +253,7 @@ static int enable_channel(char *session_name)
                        success = 1;
                }
 
+skip_enable:
                if (lttng_opt_mi) {
                        /* Mi print the channel element and leave it open */
                        ret = mi_lttng_channel(writer, &chan, 1);
@@ -368,6 +318,7 @@ static void init_channel_config(void)
         * those needed to be set by the default values.
         */
        memset(&chan.attr, -1, sizeof(chan.attr));
+       chan.attr.extended.ptr = NULL;
 }
 
 /*
@@ -388,7 +339,7 @@ int cmd_enable_channels(int argc, const char **argv)
        while ((opt = poptGetNextOpt(pc)) != -1) {
                switch (opt) {
                case OPT_HELP:
-                       usage(stdout);
+                       SHOW_HELP();
                        goto end;
                case OPT_DISCARD:
                        chan.attr.overwrite = 0;
@@ -550,12 +501,17 @@ int cmd_enable_channels(int argc, const char **argv)
                        list_cmd_options(stdout, long_options);
                        goto end;
                default:
-                       usage(stderr);
                        ret = CMD_UNDEFINED;
                        goto end;
                }
        }
 
+       ret = print_missing_or_multiple_domains(opt_kernel + opt_userspace);
+       if (ret) {
+               ret = CMD_ERROR;
+               goto end;
+       }
+
        /* Mi check */
        if (lttng_opt_mi) {
                writer = mi_lttng_writer_create(fileno(stdout), lttng_opt_mi);
@@ -584,7 +540,6 @@ int cmd_enable_channels(int argc, const char **argv)
        opt_channels = (char*) poptGetArg(pc);
        if (opt_channels == NULL) {
                ERR("Missing channel name.\n");
-               usage(stderr);
                ret = CMD_ERROR;
                success = 0;
                goto mi_closing;
This page took 0.02572 seconds and 4 git commands to generate.