On Mon, May 06, 2019 at 09:38:55PM +0000, Song Liu wrote: SNIP
> > > > Link: http://lkml.kernel.org/n/tip-99g9rg4p20a1o99vr0nkj...@git.kernel.org > > Signed-off-by: Jiri Olsa <jo...@kernel.org> > > --- > > tools/include/linux/kernel.h | 1 + > > tools/lib/vsprintf.c | 19 +++++++++++++++++++ > > tools/perf/builtin-script.c | 1 + > > tools/perf/util/map.c | 6 ++++++ > > tools/perf/util/symbol_conf.h | 1 + > > 5 files changed, 28 insertions(+) > > > > diff --git a/tools/include/linux/kernel.h b/tools/include/linux/kernel.h > > index 857d9e22826e..cba226948a0c 100644 > > --- a/tools/include/linux/kernel.h > > +++ b/tools/include/linux/kernel.h > > @@ -102,6 +102,7 @@ > > > > int vscnprintf(char *buf, size_t size, const char *fmt, va_list args); > > int scnprintf(char * buf, size_t size, const char * fmt, ...); > > +int scnprintf_pad(char * buf, size_t size, const char * fmt, ...); > > > > #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + > > __must_be_array(arr)) > > > > diff --git a/tools/lib/vsprintf.c b/tools/lib/vsprintf.c > > index e08ee147eab4..149a15013b23 100644 > > --- a/tools/lib/vsprintf.c > > +++ b/tools/lib/vsprintf.c > > @@ -23,3 +23,22 @@ int scnprintf(char * buf, size_t size, const char * fmt, > > ...) > > > > return (i >= ssize) ? (ssize - 1) : i; > > } > > + > > +int scnprintf_pad(char * buf, size_t size, const char * fmt, ...) > > +{ > > + ssize_t ssize = size; > > + va_list args; > > + int i; > > nit: I guess we can avoid mixing int, ssize_t and size_t here? I copied that from scnprintf ;-) the thing is that at the end we call vsnprintf, which takes size_t as size param and returns int, so there will be casting at some point in any case.. I guess the ssize_t was introduced to compare the size_t value with int > > > > + > > + va_start(args, fmt); > > + i = vsnprintf(buf, size, fmt, args); > > + va_end(args); > > + > > + if (i < (int) size) { > > + for (; i < (int) size; i++) > > + buf[i] = ' '; > > + buf[i] = 0x0; > > + } > > + > > + return (i >= ssize) ? (ssize - 1) : i; > > +} > > diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c > > index 61cfd8f70989..7adaa6c63a0b 100644 > > --- a/tools/perf/builtin-script.c > > +++ b/tools/perf/builtin-script.c > > @@ -3297,6 +3297,7 @@ static int parse_call_trace(const struct option *opt > > __maybe_unused, > > parse_output_fields(NULL, "-ip,-addr,-event,-period,+callindent", 0); > > itrace_parse_synth_opts(opt, "cewp", 0); > > symbol_conf.nanosecs = true; > > + symbol_conf.pad_output_len_dso = 50; > > return 0; > > } > > > > diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c > > index ee71efb9db62..c3fbd6e556b0 100644 > > --- a/tools/perf/util/map.c > > +++ b/tools/perf/util/map.c > > @@ -405,6 +405,7 @@ size_t map__fprintf(struct map *map, FILE *fp) > > > > size_t map__fprintf_dsoname(struct map *map, FILE *fp) > > { > > + char buf[PATH_MAX]; > > nit: PATH_MAX vs. 50 is a little weird. right, the "staying on the safe side" is too big here, will change thanks, jirka