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

Reply via email to