From: Namhyung Kim <namhyung@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
Jiri Olsa <jolsa@redhat.com>, Ingo Molnar <mingo@kernel.org>,
Frederic Weisbecker <fweisbec@gmail.com>
Subject: Re: tools lib traceevent: Report better error message on bad function args
Date: Tue, 19 Nov 2013 11:23:56 +0900 [thread overview]
Message-ID: <87siutt9hf.fsf@sejong.aot.lge.com> (raw)
In-Reply-To: <20131118191131.165034f8@gandalf.local.home> (Steven Rostedt's message of "Mon, 18 Nov 2013 19:11:31 -0500")
Hi Steven,
On Mon, 18 Nov 2013 19:11:31 -0500, Steven Rostedt wrote:
> 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>
>
> diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
> index 0362d57..f7aab3d 100644
> --- a/tools/lib/traceevent/event-parse.c
> +++ b/tools/lib/traceevent/event-parse.c
> @@ -2691,7 +2691,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;
> @@ -2708,15 +2707,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);
> + return EVENT_ERROR;
> + }
> + } 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);
> + return EVENT_ERROR;
It seems that you missed to free farg and token in error paths.
Thanks,
Namhyung
> + }
> }
>
> *next_arg = farg;
next prev parent reply other threads:[~2013-11-19 2:24 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-19 0:11 tools lib traceevent: Report better error message on bad function args Steven Rostedt
2013-11-19 2:23 ` Namhyung Kim [this message]
2013-11-19 2:31 ` Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87siutt9hf.fsf@sejong.aot.lge.com \
--to=namhyung@kernel.org \
--cc=acme@ghostprotocols.net \
--cc=fweisbec@gmail.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.