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 | { |
