lkml.org 
[lkml]   [2012]   [Sep]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/3] tools lib traceevent: Get rid of die() from pretty_print()
    Date
    From: Namhyung Kim <namhyung.kim@lge.com>

    There are three cases that call die() in the pretty_print.

    1. insufficient number of argument: cannot proceed anymore.
    2. too long format conversion specifier: truncate and proceed.
    3. bad size specifier in format string: skip and proceed.

    For all cases, convert die to do_warning, mark the event as
    EVENT_FL_FAILED and print error message at the last.

    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    ---
    tools/lib/traceevent/event-parse.c | 43 ++++++++++++++++++++++++++++----------
    1 file changed, 32 insertions(+), 11 deletions(-)

    diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
    index b5b4d806ffa2..6d5e75987a3d 100644
    --- a/tools/lib/traceevent/event-parse.c
    +++ b/tools/lib/traceevent/event-parse.c
    @@ -3889,8 +3889,11 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
    goto cont_process;
    case '*':
    /* The argument is the length. */
    - if (!arg)
    - die("no argument match");
    + if (!arg) {
    + do_warning("no argument match");
    + event->flags |= EVENT_FL_FAILED;
    + goto out_failed;
    + }
    len_arg = eval_num_arg(data, size, event, arg);
    len_as_arg = 1;
    arg = arg->next;
    @@ -3923,15 +3926,21 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
    case 'x':
    case 'X':
    case 'u':
    - if (!arg)
    - die("no argument match");
    + if (!arg) {
    + do_warning("no argument match");
    + event->flags |= EVENT_FL_FAILED;
    + goto out_failed;
    + }

    len = ((unsigned long)ptr + 1) -
    (unsigned long)saveptr;

    /* should never happen */
    - if (len > 31)
    - die("bad format!");
    + if (len > 31) {
    + do_warning("bad format!");
    + event->flags |= EVENT_FL_FAILED;
    + len = 31;
    + }

    memcpy(format, saveptr, len);
    format[len] = 0;
    @@ -3995,19 +4004,26 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
    trace_seq_printf(s, format, (long long)val);
    break;
    default:
    - die("bad count (%d)", ls);
    + do_warning("bad count (%d)", ls);
    + event->flags |= EVENT_FL_FAILED;
    }
    break;
    case 's':
    - if (!arg)
    - die("no matching argument");
    + if (!arg) {
    + do_warning("no matching argument");
    + event->flags |= EVENT_FL_FAILED;
    + goto out_failed;
    + }

    len = ((unsigned long)ptr + 1) -
    (unsigned long)saveptr;

    /* should never happen */
    - if (len > 31)
    - die("bad format!");
    + if (len > 31) {
    + do_warning("bad format!");
    + event->flags |= EVENT_FL_FAILED;
    + len = 31;
    + }

    memcpy(format, saveptr, len);
    format[len] = 0;
    @@ -4025,6 +4041,11 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
    trace_seq_putc(s, *ptr);
    }

    + if (event->flags & EVENT_FL_FAILED) {
    +out_failed:
    + trace_seq_printf(s, "[FAILED TO PARSE]");
    + }
    +
    if (args) {
    free_args(args);
    free(bprint_fmt);
    --
    1.7.11.4


    \
     
     \ /
      Last update: 2012-09-07 05:41    [W:0.032 / U:1.596 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site