lkml.org 
[lkml]   [2013]   [Dec]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 03/21] tools lib traceevent: Report better error message on bad function args
    Date
    From: Steven Rostedt <rostedt@goodmis.org>

    When Jiri Olsa was writing a function callback for
    scsi_trace_parse_cdb(), he thought that the traceevent library had a
    bug in it because he was getting this error:

    Error: expected ')' but read ','
    Error: expected ')' but read ','
    Error: expected ')' but read ','
    Error: expected ')' but read ','

    But in truth, he didn't have the write number of arguments for the
    function callback, and the error was the library detecting the
    discrepancy. A better error message would have prevented the confusion:

    Error: function 'scsi_trace_parse_cdb()' only expects 2 arguments but event scsi_dispatch_cmd_timeout has more
    Error: function 'scsi_trace_parse_cdb()' only expects 2 arguments but event scsi_dispatch_cmd_start has more
    Error: function 'scsi_trace_parse_cdb()' only expects 2 arguments but event scsi_dispatch_cmd_error has more
    Error: function 'scsi_trace_parse_cdb()' only expects 2 arguments but event scsi_dispatch_cmd_done has more

    Or

    Error: function 'scsi_trace_parse_cdb()' expects 4 arguments but event scsi_dispatch_cmd_timeout only uses 3
    Error: function 'scsi_trace_parse_cdb()' expects 4 arguments but event scsi_dispatch_cmd_start only uses 3
    Error: function 'scsi_trace_parse_cdb()' expects 4 arguments but event scsi_dispatch_cmd_error only uses 3
    Error: function 'scsi_trace_parse_cdb()' expects 4 arguments but event scsi_dispatch_cmd_done only uses 3

    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    Link: http://lkml.kernel.org/n/tip-a4c34w62vl0diitvxb7bt3er@git.kernel.org
    Signed-off-by: Jiri Olsa <jolsa@redhat.com>
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/lib/traceevent/event-parse.c | 28 ++++++++++++++++++----------
    1 file changed, 18 insertions(+), 10 deletions(-)

    diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
    index 9849873265d4..22566c271275 100644
    --- a/tools/lib/traceevent/event-parse.c
    +++ b/tools/lib/traceevent/event-parse.c
    @@ -2710,7 +2710,6 @@ process_func_handler(struct event_format *event, struct pevent_function_handler
    struct print_arg *farg;
    enum event_type type;
    char *token;
    - const char *test;
    int i;

    arg->type = PRINT_FUNC;
    @@ -2727,15 +2726,19 @@ process_func_handler(struct event_format *event, struct pevent_function_handler
    }

    type = process_arg(event, farg, &token);
    - if (i < (func->nr_args - 1))
    - test = ",";
    - else
    - test = ")";
    -
    - if (test_type_token(type, token, EVENT_DELIM, test)) {
    - free_arg(farg);
    - free_token(token);
    - return EVENT_ERROR;
    + if (i < (func->nr_args - 1)) {
    + if (type != EVENT_DELIM || strcmp(token, ",") != 0) {
    + warning("Error: function '%s()' expects %d arguments but event %s only uses %d",
    + func->name, func->nr_args,
    + event->name, i + 1);
    + goto err;
    + }
    + } else {
    + if (type != EVENT_DELIM || strcmp(token, ")") != 0) {
    + warning("Error: function '%s()' only expects %d arguments but event %s has more",
    + func->name, func->nr_args, event->name);
    + goto err;
    + }
    }

    *next_arg = farg;
    @@ -2747,6 +2750,11 @@ process_func_handler(struct event_format *event, struct pevent_function_handler
    *tok = token;

    return type;
    +
    +err:
    + free_arg(farg);
    + free_token(token);
    + return EVENT_ERROR;
    }

    static enum event_type
    --
    1.8.1.4


    \
     
     \ /
      Last update: 2013-12-09 21:01    [W:3.812 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site