X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng%2Fcommands%2Fcreate.c;h=d3e5b9a84106f84fbde44c50eb8376bcd8faae94;hp=40d2a77d94b48b9d8435948c2c2b557ade3792ed;hb=a8d119b5ea8e40cde5f5e70c1ae4cfc86cb35a80;hpb=84811b9b3552a24a5f12871f94b60b9b4c48d8f5 diff --git a/src/bin/lttng/commands/create.c b/src/bin/lttng/commands/create.c index 40d2a77d9..d3e5b9a84 100644 --- a/src/bin/lttng/commands/create.c +++ b/src/bin/lttng/commands/create.c @@ -49,7 +49,13 @@ static char *opt_shm_path; static int opt_no_consumer; static int opt_no_output; static int opt_snapshot; -static unsigned int opt_live_timer; +static uint32_t opt_live_timer; + +#ifdef LTTNG_EMBED_HELP +static const char help_msg[] = +#include +; +#endif enum { OPT_HELP = 1, @@ -436,7 +442,7 @@ static int create_session(void) MSG("Traces will be written in %s", print_str_url); if (opt_live_timer) { - MSG("Live timer set to %u usec", opt_live_timer); + MSG("Live timer set to %u %s", opt_live_timer, USEC_UNIT); } } else if (opt_snapshot) { if (print_str_url) { @@ -610,6 +616,22 @@ end: return ret; } +int validate_url_option_combination(void) +{ + int ret = 0; + int used_count = 0; + + used_count += !!opt_url; + used_count += !!opt_output_path; + used_count += (opt_data_url || opt_ctrl_url); + if (used_count > 1) { + ERR("Only one of the --set-url, --ctrl-url/data-url, or --output options may be used at once."); + ret = -1; + } + + return ret; +} + /* * The 'create ' first level command * @@ -619,6 +641,7 @@ int cmd_create(int argc, const char **argv) { int opt, ret = CMD_SUCCESS, command_ret = CMD_SUCCESS, success = 1; char *opt_arg = NULL; + const char *leftover = NULL; static poptContext pc; pc = poptGetContext(NULL, argc, argv, long_options, 0); @@ -634,7 +657,7 @@ int cmd_create(int argc, const char **argv) goto end; case OPT_LIVE_TIMER: { - unsigned long v; + uint64_t v; errno = 0; opt_arg = poptGetOptArg(pc); @@ -646,22 +669,24 @@ int cmd_create(int argc, const char **argv) break; } - v = strtoul(opt_arg, NULL, 0); - if (errno != 0 || !isdigit(opt_arg[0])) { - ERR("Wrong value in --live parameter: %s", opt_arg); + if (utils_parse_time_suffix(opt_arg, &v) < 0) { + ERR("Wrong value for --live parameter: %s", opt_arg); ret = CMD_ERROR; goto end; } + if (v != (uint32_t) v) { ERR("32-bit overflow in --live parameter: %s", opt_arg); ret = CMD_ERROR; goto end; } + if (v == 0) { ERR("Live timer interval must be greater than zero"); ret = CMD_ERROR; goto end; } + opt_live_timer = (uint32_t) v; DBG("Session live timer interval set to %d", opt_live_timer); break; @@ -678,6 +703,12 @@ int cmd_create(int argc, const char **argv) goto end; } + ret = validate_url_option_combination(); + if (ret) { + ret = CMD_ERROR; + goto end; + } + /* Spawn a session daemon if needed */ if (!opt_no_sessiond) { ret = launch_sessiond(); @@ -713,6 +744,13 @@ int cmd_create(int argc, const char **argv) } opt_session_name = (char*) poptGetArg(pc); + leftover = poptGetArg(pc); + if (leftover) { + ERR("Unknown argument: %s", leftover); + ret = CMD_ERROR; + goto end; + } + command_ret = create_session(); if (command_ret) { success = 0;