aboutsummaryrefslogtreecommitdiffstats
path: root/parse-events.c
diff options
context:
space:
mode:
Diffstat (limited to 'parse-events.c')
-rw-r--r--parse-events.c56
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
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);