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/

Reply via email to