tools lib traceevent: Refactor create_arg_item()
authorNamhyung Kim <namhyung.kim@lge.com>
Thu, 12 Dec 2013 07:36:12 +0000 (16:36 +0900)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 13 Dec 2013 13:30:22 +0000 (10:30 -0300)
So that it can return a proper pevent_errno value.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/1386833777-3790-10-git-send-email-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/lib/traceevent/event-parse.h
tools/lib/traceevent/parse-filter.c

index 5e4392d8e2d438e19e8a3c545c6518028c466c11..57b66aed8122d199f84cfb74914e1662bca1bb13 100644 (file)
@@ -367,7 +367,8 @@ enum pevent_flag {
        _PE(ILLEGAL_INTEGER_CMP,"illegal comparison for integer"),            \
        _PE(REPARENT_NOT_OP,    "cannot reparent other than OP"),             \
        _PE(REPARENT_FAILED,    "failed to reparent filter OP"),              \
-       _PE(BAD_FILTER_ARG,     "bad arg in filter tree")
+       _PE(BAD_FILTER_ARG,     "bad arg in filter tree"),                    \
+       _PE(UNEXPECTED_TYPE,    "unexpected type (not a value)")
 
 #undef _PE
 #define _PE(__code, __str) PEVENT_ERRNO__ ## __code
index 9b05892566e06b59cf2f2b169fed101bf9e0de4a..8d71208f01319b7a2b08ac8b0ec98a7bd01800fa 100644 (file)
@@ -368,9 +368,9 @@ static void free_events(struct event_list *events)
        }
 }
 
-static struct filter_arg *
+static enum pevent_errno
 create_arg_item(struct event_format *event, const char *token,
-               enum event_type type, char **error_str)
+               enum event_type type, struct filter_arg **parg, char **error_str)
 {
        struct format_field *field;
        struct filter_arg *arg;
@@ -378,7 +378,7 @@ create_arg_item(struct event_format *event, const char *token,
        arg = allocate_arg();
        if (arg == NULL) {
                show_error(error_str, "failed to allocate filter arg");
-               return NULL;
+               return PEVENT_ERRNO__MEM_ALLOC_FAILED;
        }
 
        switch (type) {
@@ -392,7 +392,7 @@ create_arg_item(struct event_format *event, const char *token,
                if (!arg->value.str) {
                        free_arg(arg);
                        show_error(error_str, "failed to allocate string filter arg");
-                       return NULL;
+                       return PEVENT_ERRNO__MEM_ALLOC_FAILED;
                }
                break;
        case EVENT_ITEM:
@@ -420,11 +420,11 @@ create_arg_item(struct event_format *event, const char *token,
                break;
        default:
                free_arg(arg);
-               show_error(error_str, "expected a value but found %s",
-                          token);
-               return NULL;
+               show_error(error_str, "expected a value but found %s", token);
+               return PEVENT_ERRNO__UNEXPECTED_TYPE;
        }
-       return arg;
+       *parg = arg;
+       return 0;
 }
 
 static struct filter_arg *
@@ -993,8 +993,8 @@ process_filter(struct event_format *event, struct filter_arg **parg,
                case EVENT_SQUOTE:
                case EVENT_DQUOTE:
                case EVENT_ITEM:
-                       arg = create_arg_item(event, token, type, error_str);
-                       if (!arg)
+                       ret = create_arg_item(event, token, type, &arg, error_str);
+                       if (ret < 0)
                                goto fail;
                        if (!left_item)
                                left_item = arg;