diff options
author | Steven Rostedt <srostedt@redhat.com> | 2009-10-13 21:17:06 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2009-10-13 21:17:06 -0400 |
commit | 21a1b1ac8d57c64e67809727b54d0e8c6112d877 (patch) | |
tree | 798ebe4f00194d001141ee077fbfc8a41facac01 | |
parent | 361d4f6cb71c2cc7a0c379c62d3da96c42d6f445 (diff) |
handle new "signed" field in format layout
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | parse-events.c | 64 |
1 files changed, 55 insertions, 9 deletions
diff --git a/parse-events.c b/parse-events.c index 9b4960f..7541af2 100644 --- a/parse-events.c +++ b/parse-events.c | |||
@@ -917,8 +917,30 @@ int event_read_fields(struct event *event, struct format_field **fields) | |||
917 | if (read_expected(EVENT_OP, ";") < 0) | 917 | if (read_expected(EVENT_OP, ";") < 0) |
918 | goto fail_expect; | 918 | goto fail_expect; |
919 | 919 | ||
920 | if (read_expect_type(EVENT_NEWLINE, &token) < 0) | 920 | type = read_token(&token); |
921 | goto fail; | 921 | if (type != EVENT_NEWLINE) { |
922 | /* newer versions of the kernel have a "signed" type */ | ||
923 | if (test_type_token(type, token, EVENT_ITEM, "signed")) | ||
924 | goto fail; | ||
925 | |||
926 | free_token(token); | ||
927 | |||
928 | if (read_expected(EVENT_OP, ":") < 0) | ||
929 | goto fail_expect; | ||
930 | |||
931 | if (read_expect_type(EVENT_ITEM, &token)) | ||
932 | goto fail; | ||
933 | |||
934 | /* add signed type */ | ||
935 | |||
936 | free_token(token); | ||
937 | if (read_expected(EVENT_OP, ";") < 0) | ||
938 | goto fail_expect; | ||
939 | |||
940 | if (read_expect_type(EVENT_NEWLINE, &token)) | ||
941 | goto fail; | ||
942 | } | ||
943 | |||
922 | free_token(token); | 944 | free_token(token); |
923 | 945 | ||
924 | *fields = field; | 946 | *fields = field; |
@@ -2952,10 +2974,11 @@ void print_args(struct print_arg *args) | |||
2952 | } | 2974 | } |
2953 | } | 2975 | } |
2954 | 2976 | ||
2955 | static void parse_header_field(char *type, | 2977 | static void parse_header_field(char *field, |
2956 | int *offset, int *size) | 2978 | int *offset, int *size) |
2957 | { | 2979 | { |
2958 | char *token; | 2980 | char *token; |
2981 | int type; | ||
2959 | 2982 | ||
2960 | if (read_expected(EVENT_ITEM, "field") < 0) | 2983 | if (read_expected(EVENT_ITEM, "field") < 0) |
2961 | return; | 2984 | return; |
@@ -2964,10 +2987,10 @@ static void parse_header_field(char *type, | |||
2964 | 2987 | ||
2965 | /* type */ | 2988 | /* type */ |
2966 | if (read_expect_type(EVENT_ITEM, &token) < 0) | 2989 | if (read_expect_type(EVENT_ITEM, &token) < 0) |
2967 | return; | 2990 | goto fail; |
2968 | free_token(token); | 2991 | free_token(token); |
2969 | 2992 | ||
2970 | if (read_expected(EVENT_ITEM, type) < 0) | 2993 | if (read_expected(EVENT_ITEM, field) < 0) |
2971 | return; | 2994 | return; |
2972 | if (read_expected(EVENT_OP, ";") < 0) | 2995 | if (read_expected(EVENT_OP, ";") < 0) |
2973 | return; | 2996 | return; |
@@ -2976,7 +2999,7 @@ static void parse_header_field(char *type, | |||
2976 | if (read_expected(EVENT_OP, ":") < 0) | 2999 | if (read_expected(EVENT_OP, ":") < 0) |
2977 | return; | 3000 | return; |
2978 | if (read_expect_type(EVENT_ITEM, &token) < 0) | 3001 | if (read_expect_type(EVENT_ITEM, &token) < 0) |
2979 | return; | 3002 | goto fail; |
2980 | *offset = atoi(token); | 3003 | *offset = atoi(token); |
2981 | free_token(token); | 3004 | free_token(token); |
2982 | if (read_expected(EVENT_OP, ";") < 0) | 3005 | if (read_expected(EVENT_OP, ";") < 0) |
@@ -2986,13 +3009,36 @@ static void parse_header_field(char *type, | |||
2986 | if (read_expected(EVENT_OP, ":") < 0) | 3009 | if (read_expected(EVENT_OP, ":") < 0) |
2987 | return; | 3010 | return; |
2988 | if (read_expect_type(EVENT_ITEM, &token) < 0) | 3011 | if (read_expect_type(EVENT_ITEM, &token) < 0) |
2989 | return; | 3012 | goto fail; |
2990 | *size = atoi(token); | 3013 | *size = atoi(token); |
2991 | free_token(token); | 3014 | free_token(token); |
2992 | if (read_expected(EVENT_OP, ";") < 0) | 3015 | if (read_expected(EVENT_OP, ";") < 0) |
2993 | return; | 3016 | return; |
2994 | if (read_expect_type(EVENT_NEWLINE, &token) < 0) | 3017 | type = read_token(&token); |
2995 | return; | 3018 | if (type != EVENT_NEWLINE) { |
3019 | /* newer versions of the kernel have a "signed" type */ | ||
3020 | if (type != EVENT_ITEM) | ||
3021 | goto fail; | ||
3022 | |||
3023 | if (strcmp(token, "signed") != 0) | ||
3024 | goto fail; | ||
3025 | |||
3026 | free_token(token); | ||
3027 | |||
3028 | if (read_expected(EVENT_OP, ":") < 0) | ||
3029 | return; | ||
3030 | |||
3031 | if (read_expect_type(EVENT_ITEM, &token)) | ||
3032 | goto fail; | ||
3033 | |||
3034 | free_token(token); | ||
3035 | if (read_expected(EVENT_OP, ";") < 0) | ||
3036 | return; | ||
3037 | |||
3038 | if (read_expect_type(EVENT_NEWLINE, &token)) | ||
3039 | goto fail; | ||
3040 | } | ||
3041 | fail: | ||
2996 | free_token(token); | 3042 | free_token(token); |
2997 | } | 3043 | } |
2998 | 3044 | ||