diff options
author | Steven Rostedt <srostedt@redhat.com> | 2010-02-19 10:10:09 -0500 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2010-02-19 10:10:09 -0500 |
commit | 32b0f9256e7411e0fe658bf0d0cf6b034c67e9da (patch) | |
tree | bbb7afdb2d4f42930833e129089fa49377c2a6b5 | |
parent | 83cf6acee118b7b6911729819be25d6bb5cc5901 (diff) |
parse-events: Add pevent_event_common_fields() and pevent_event_fields()
Add the functions pevent_event_common_fields() and pevent_event_fields()
that return an allocated array of the events common or event specific
fields.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r-- | parse-events.c | 56 | ||||
-rw-r--r-- | parse-events.h | 2 |
2 files changed, 58 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); |
diff --git a/parse-events.h b/parse-events.h index 73fc2ea..bccb9ee 100644 --- a/parse-events.h +++ b/parse-events.h | |||
@@ -429,6 +429,8 @@ void pevent_event_info(struct trace_seq *s, struct event_format *event, | |||
429 | struct record *record); | 429 | struct record *record); |
430 | 430 | ||
431 | struct event_format **pevent_list_events(struct pevent *pevent, enum event_sort_type); | 431 | struct event_format **pevent_list_events(struct pevent *pevent, enum event_sort_type); |
432 | struct format_field **pevent_event_common_fields(struct event_format *event); | ||
433 | struct format_field **pevent_event_fields(struct event_format *event); | ||
432 | 434 | ||
433 | static inline int pevent_get_cpus(struct pevent *pevent) | 435 | static inline int pevent_get_cpus(struct pevent *pevent) |
434 | { | 436 | { |