Em Tue, Jul 21, 2015 at 02:31:31PM +0200, Jiri Olsa escreveu: > We will reuse argv style data in following change to display > counters header showing monitored command line.
Applied > Link: http://lkml.kernel.org/n/tip-qu64zmm5zbpbkuybusnkg...@git.kernel.org > Signed-off-by: Jiri Olsa <jo...@kernel.org> > --- > tools/perf/util/header.c | 35 ++++++++++++++++++++--------------- > tools/perf/util/header.h | 1 + > tools/perf/util/session.c | 1 + > 3 files changed, 22 insertions(+), 15 deletions(-) > > diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c > index 03ace57a800c..179b2bdd157d 100644 > --- a/tools/perf/util/header.c > +++ b/tools/perf/util/header.c > @@ -923,17 +923,13 @@ static void print_cmdline(struct perf_header *ph, int > fd __maybe_unused, > FILE *fp) > { > int nr, i; > - char *str; > > nr = ph->env.nr_cmdline; > - str = ph->env.cmdline; > > fprintf(fp, "# cmdline : "); > > - for (i = 0; i < nr; i++) { > - fprintf(fp, "%s ", str); > - str += strlen(str) + 1; > - } > + for (i = 0; i < nr; i++) > + fprintf(fp, "%s ", ph->env.cmdline_argv[i]); > fputc('\n', fp); > } > > @@ -1541,14 +1537,13 @@ process_event_desc(struct perf_file_section *section > __maybe_unused, > return 0; > } > > -static int process_cmdline(struct perf_file_section *section __maybe_unused, > +static int process_cmdline(struct perf_file_section *section, > struct perf_header *ph, int fd, > void *data __maybe_unused) > { > ssize_t ret; > - char *str; > - u32 nr, i; > - struct strbuf sb; > + char *str, *cmdline = NULL, **argv = NULL; > + u32 nr, i, len = 0; > > ret = readn(fd, &nr, sizeof(nr)); > if (ret != sizeof(nr)) > @@ -1558,22 +1553,32 @@ static int process_cmdline(struct perf_file_section > *section __maybe_unused, > nr = bswap_32(nr); > > ph->env.nr_cmdline = nr; > - strbuf_init(&sb, 128); > + > + cmdline = zalloc(section->size + nr + 1); > + if (!cmdline) > + return -1; > + > + argv = zalloc(sizeof(char *) * (nr + 1)); > + if (!argv) > + goto error; > > for (i = 0; i < nr; i++) { > str = do_read_string(fd, ph); > if (!str) > goto error; > > - /* include a NULL character at the end */ > - strbuf_add(&sb, str, strlen(str) + 1); > + argv[i] = cmdline + len; > + memcpy(argv[i], str, strlen(str) + 1); > + len += strlen(str) + 1; > free(str); > } > - ph->env.cmdline = strbuf_detach(&sb, NULL); > + ph->env.cmdline = cmdline; > + ph->env.cmdline_argv = (const char **) argv; > return 0; > > error: > - strbuf_release(&sb); > + free(argv); > + free(cmdline); > return -1; > } > > diff --git a/tools/perf/util/header.h b/tools/perf/util/header.h > index d4d57962c591..9b53b6525ce8 100644 > --- a/tools/perf/util/header.h > +++ b/tools/perf/util/header.h > @@ -84,6 +84,7 @@ struct perf_session_env { > int nr_pmu_mappings; > int nr_groups; > char *cmdline; > + const char **cmdline_argv; > char *sibling_cores; > char *sibling_threads; > char *numa_nodes; > diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c > index ed9dc2555ec7..fb1d525ca3d0 100644 > --- a/tools/perf/util/session.c > +++ b/tools/perf/util/session.c > @@ -180,6 +180,7 @@ static void perf_session_env__delete(struct > perf_session_env *env) > zfree(&env->cpuid); > > zfree(&env->cmdline); > + zfree(&env->cmdline_argv); > zfree(&env->sibling_cores); > zfree(&env->sibling_threads); > zfree(&env->numa_nodes); > -- > 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/