aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-02-19 10:10:09 -0500
committerSteven Rostedt <rostedt@goodmis.org>2010-02-19 10:10:09 -0500
commit32b0f9256e7411e0fe658bf0d0cf6b034c67e9da (patch)
treebbb7afdb2d4f42930833e129089fa49377c2a6b5
parent83cf6acee118b7b6911729819be25d6bb5cc5901 (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.c56
-rw-r--r--parse-events.h2
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
3602static struct format_field **
3603get_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 */
3637struct 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 */
3651struct 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
3602static void print_fields(struct trace_seq *s, struct print_flag_sym *field) 3658static 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
431struct event_format **pevent_list_events(struct pevent *pevent, enum event_sort_type); 431struct event_format **pevent_list_events(struct pevent *pevent, enum event_sort_type);
432struct format_field **pevent_event_common_fields(struct event_format *event);
433struct format_field **pevent_event_fields(struct event_format *event);
432 434
433static inline int pevent_get_cpus(struct pevent *pevent) 435static inline int pevent_get_cpus(struct pevent *pevent)
434{ 436{