On Thu, 23 Nov 2017 18:33:28 +0200 "Vladislav Valtchev (VMware)" <vladislav.valtc...@gmail.com> wrote:
> In this patch a huge part of trace_record(), dealing with parsing the command > line options, has been extracted in a separate function. That allows the body > of trace_record() to be focused only on the proper actions involved in a given > type of tracing (record, stream, etc.) reducing, this way, the scope and the > complexity of trace_record(). Hi Vladislav, I applied patches 1-3. > > Signed-off-by: Vladislav Valtchev (VMware) <vladislav.valtc...@gmail.com> > --- > + > +static void parse_record_options(int argc, > + char **argv, > + struct common_record_context *ctx) > { > const char *plugin = NULL; > - const char *output = NULL; > const char *option; > struct event_list *event = NULL; > struct event_list *last_event = NULL; > - struct buffer_instance *instance = &top_instance; > - enum trace_type type = 0; > char *pids; > char *pid; > char *sav; > - char *date2ts = NULL; > - int record_all = 0; > - int total_disable = 0; > - int disable = 0; > - int events = 0; > - int record = 0; > - int extract = 0; > - int stream = 0; > - int profile = 0; > - int global = 0; > - int start = 0; > - int filtered = 0; > - int run_command = 0; > int neg_event = 0; > - int date = 0; > - int manual = 0; > - char *max_graph_depth = NULL; > - int topt = 0; > - int do_child = 0; > - int data_flags = 0; > - > - int c; > - > - init_instance(instance); > - > - cpu_count = count_cpus(); > - > - if ((record = (strcmp(argv[1], "record") == 0))) > - ; /* do nothing */ > - else if ((start = strcmp(argv[1], "start") == 0)) > - ; /* do nothing */ > - else if ((extract = strcmp(argv[1], "extract") == 0)) > - ; /* do nothing */ > - else if ((stream = strcmp(argv[1], "stream") == 0)) > - ; /* do nothing */ > - else if ((profile = strcmp(argv[1], "profile") == 0)) { > - handle_init = trace_init_profile; > - events = 1; > - } else > - usage(argv); > > for (;;) { > int option_index = 0; > int ret; > + int c; > const char *opts; > static struct option long_options[] = { > {"date", no_argument, NULL, OPT_date}, > @@ -4431,7 +4419,7 @@ void trace_record(int argc, char **argv) > + > +static void init_common_record_context(struct common_record_context *ctx) > +{ > + memset(ctx, 0, sizeof(*ctx)); > + ctx->instance = &top_instance; > + cpu_count = count_cpus(); > +} > + > +void trace_record(int argc, char **argv) > +{ > + struct common_record_context ctx; > + enum trace_type type = 0; > + > + init_common_record_context(&ctx); > + init_instance(ctx.instance); Is there a reason that init_instance() isn't called in init_common_record_context()? Also, why not just do the "init_common_record_context()" in parse_record_options()? -- Steve > + > + if ((ctx.record = (strcmp(argv[1], "record") == 0))) > + ; /* do nothing */ > + else if ((ctx.start = strcmp(argv[1], "start") == 0)) > + ; /* do nothing */ > + else if ((ctx.extract = strcmp(argv[1], "extract") == 0)) > + ; /* do nothing */ > + else if ((ctx.stream = strcmp(argv[1], "stream") == 0)) > + ; /* do nothing */ > + else if ((ctx.profile = strcmp(argv[1], "profile") == 0)) { > + handle_init = trace_init_profile; > + ctx.events = 1; > + } else > + usage(argv); > + > + > + parse_record_options(argc, argv, &ctx); > + > + > /* > * If this is a profile run, and no instances were set, > * then enable profiling on the top instance. > */