diff options
Diffstat (limited to 'parse-events.c')
-rw-r--r-- | parse-events.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/parse-events.c b/parse-events.c index db60c7b..b483e85 100644 --- a/parse-events.c +++ b/parse-events.c | |||
@@ -3599,6 +3599,62 @@ struct event_format **pevent_list_events(struct pevent *pevent, enum event_sort_ | |||
3599 | return events; | 3599 | return events; |
3600 | } | 3600 | } |
3601 | 3601 | ||
3602 | static struct format_field ** | ||
3603 | get_event_fields(const char *type, const char *name, | ||
3604 | int count, struct format_field *list) | ||
3605 | { | ||
3606 | struct format_field **fields; | ||
3607 | struct format_field *field; | ||
3608 | int i = 0; | ||
3609 | |||
3610 | fields = malloc_or_die(sizeof(*fields) * (count + 1)); | ||
3611 | for (field = list; field; field = field->next) { | ||
3612 | fields[i++] = field; | ||
3613 | if (i == count + 1) { | ||
3614 | warning("event %s has more %s fields than specified", | ||
3615 | name, type); | ||
3616 | i--; | ||
3617 | break; | ||
3618 | } | ||
3619 | } | ||
3620 | |||
3621 | if (i != count) | ||
3622 | warning("event %s has less %s fields than specified", | ||
3623 | name, type); | ||
3624 | |||
3625 | fields[i] = NULL; | ||
3626 | |||
3627 | return fields; | ||
3628 | } | ||
3629 | |||
3630 | /** | ||
3631 | * pevent_event_common_fields - return a list of common fields for an event | ||
3632 | * @event: the event to return the common fields of. | ||
3633 | * | ||
3634 | * Returns an allocated array of fields. The last item in the array is NULL. | ||
3635 | * The array must be freed with free(). | ||
3636 | */ | ||
3637 | struct format_field **pevent_event_common_fields(struct event_format *event) | ||
3638 | { | ||
3639 | return get_event_fields("common", event->name, | ||
3640 | event->format.nr_common, | ||
3641 | event->format.common_fields); | ||
3642 | } | ||
3643 | |||
3644 | /** | ||
3645 | * pevent_event_fields - return a list of event specific fields for an event | ||
3646 | * @event: the event to return the fields of. | ||
3647 | * | ||
3648 | * Returns an allocated array of fields. The last item in the array is NULL. | ||
3649 | * The array must be freed with free(). | ||
3650 | */ | ||
3651 | struct format_field **pevent_event_fields(struct event_format *event) | ||
3652 | { | ||
3653 | return get_event_fields("event", event->name, | ||
3654 | event->format.nr_fields, | ||
3655 | event->format.fields); | ||
3656 | } | ||
3657 | |||
3602 | static void print_fields(struct trace_seq *s, struct print_flag_sym *field) | 3658 | static void print_fields(struct trace_seq *s, struct print_flag_sym *field) |
3603 | { | 3659 | { |
3604 | trace_seq_printf(s, "{ %s, %s }", field->value, field->str); | 3660 | trace_seq_printf(s, "{ %s, %s }", field->value, field->str); |