From 636167b6d43e1b9e9e96c90672001c735dd61087 Mon Sep 17 00:00:00 2001 From: David Goulet Date: Sat, 16 Jul 2011 15:36:53 -0400 Subject: [PATCH] Force to specify the type with add-context -t, --type must be used or the help shows up. Also allowed multiple -t to enable multiple context with one command. Fix a memory leak. Signed-off-by: David Goulet --- lttng/commands/add_context.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/lttng/commands/add_context.c b/lttng/commands/add_context.c index f9094adc0..1e6a807ef 100644 --- a/lttng/commands/add_context.c +++ b/lttng/commands/add_context.c @@ -36,7 +36,6 @@ static char *opt_session_name; static int *opt_kernel; static int opt_pid_all; static int opt_userspace; -static int opt_ctx_type; static int opt_perf_type; static int opt_perf_id; static pid_t opt_pid; @@ -121,7 +120,7 @@ static void usage(FILE *ofp) * * Add context to channel or event. */ -static int add_context(void) +static int add_context(int type) { int ret = CMD_SUCCESS; struct lttng_kernel_context context; @@ -131,8 +130,8 @@ static int add_context(void) goto error; } - context.ctx = opt_ctx_type; - if (opt_ctx_type == LTTNG_KERNEL_CONTEXT_PERF_COUNTER) { + context.ctx = type; + if (type == LTTNG_KERNEL_CONTEXT_PERF_COUNTER) { context.u.perf_counter.type = opt_perf_type; context.u.perf_counter.config = opt_perf_id; strncpy(context.u.perf_counter.name, opt_perf_name, @@ -140,7 +139,7 @@ static int add_context(void) } if (opt_kernel) { - DBG("Adding kernel context\n"); + DBG("Adding kernel context"); ret = lttng_kernel_add_context(&context, opt_event_name, opt_channel_name); if (ret < 0) { goto error; @@ -172,10 +171,15 @@ error: */ int cmd_add_context(int argc, const char **argv) { - int opt, ret; + int opt, ret = CMD_SUCCESS; char *tmp; static poptContext pc; + if (argc < 2) { + usage(stderr); + goto end; + } + pc = poptGetContext(NULL, argc, argv, long_options, 0); poptReadDefaultConfig(pc, 0); @@ -191,9 +195,15 @@ int cmd_add_context(int argc, const char **argv) if (tmp == NULL) { usage(stderr); ret = CMD_ERROR; + free(tmp); goto end; } - opt_ctx_type = atoi(tmp); + ret = add_context(atoi(tmp)); + if (ret < 0) { + free(tmp); + goto end; + } + free(tmp); break; default: usage(stderr); @@ -202,8 +212,6 @@ int cmd_add_context(int argc, const char **argv) } } - ret = add_context(); - end: return ret; } -- 2.34.1