On Mon, 18 Jul 2016 20:33:16 -0300 Arnaldo Carvalho de Melo <[email protected]> wrote:
> From: Jiri Olsa <[email protected]> > > Jirka reported that python code returns all arrays as strings. This > makes impossible to get all items for byte array tracepoint field > containing 0x00 value item. > > Fixing this by scanning full length of the array and returning it as > PyByteArray object in case non printable byte is found. > > Signed-off-by: Jiri Olsa <[email protected]> > Reported-and-Tested-by: Jiri Pirko <[email protected]> > Cc: David Ahern <[email protected]> > Cc: Namhyung Kim <[email protected]> > Cc: Peter Zijlstra <[email protected]> > Cc: Steven Rostedt <[email protected]> > Link: > http://lkml.kernel.org/r/[email protected] > Signed-off-by: Arnaldo Carvalho de Melo <[email protected]> > --- > .../util/scripting-engines/trace-event-python.c | 39 > ++++++++++++++++++---- > 1 file changed, 33 insertions(+), 6 deletions(-) > > diff --git a/tools/perf/util/scripting-engines/trace-event-python.c > b/tools/perf/util/scripting-engines/trace-event-python.c > index 6ac6b7a33f42..7bd6da80533e 100644 > --- a/tools/perf/util/scripting-engines/trace-event-python.c > +++ b/tools/perf/util/scripting-engines/trace-event-python.c > @@ -386,6 +386,21 @@ exit: > return pylist; > } > > +static int is_printable_array(char *p, unsigned int len) > +{ > + unsigned int i; > + > + if (!p || !len || p[len - 1] != 0) > + return 0; > + > + len--; > + > + for (i = 0; i < len; i++) { > + if (!isprint(p[i]) && !isspace(p[i])) > + return 0; > + } > + return 1; > +} > Darn, I never got to add my Reviewed-by tag, as I had lots of comments on this function. Oh well, that's what happens when you go off to volcanoes. -- Steve

