diff options
Diffstat (limited to 'tools/perf/util/trace-event-parse.c')
| -rw-r--r-- | tools/perf/util/trace-event-parse.c | 51 | 
1 files changed, 28 insertions, 23 deletions
diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c index 920b1d58a068..32e558a65af3 100644 --- a/tools/perf/util/trace-event-parse.c +++ b/tools/perf/util/trace-event-parse.c @@ -33,14 +33,15 @@ static int get_common_field(struct scripting_context *context,  			    int *offset, int *size, const char *type)  {  	struct tep_handle *pevent = context->pevent; -	struct event_format *event; -	struct format_field *field; +	struct tep_event_format *event; +	struct tep_format_field *field;  	if (!*size) { -		if (!pevent->events) + +		event = tep_get_first_event(pevent); +		if (!event)  			return 0; -		event = pevent->events[0];  		field = tep_find_common_field(event, type);  		if (!field)  			return 0; @@ -94,9 +95,9 @@ int common_pc(struct scripting_context *context)  }  unsigned long long -raw_field_value(struct event_format *event, const char *name, void *data) +raw_field_value(struct tep_event_format *event, const char *name, void *data)  { -	struct format_field *field; +	struct tep_format_field *field;  	unsigned long long val;  	field = tep_find_any_field(event, name); @@ -108,12 +109,12 @@ raw_field_value(struct event_format *event, const char *name, void *data)  	return val;  } -unsigned long long read_size(struct event_format *event, void *ptr, int size) +unsigned long long read_size(struct tep_event_format *event, void *ptr, int size)  {  	return tep_read_number(event->pevent, ptr, size);  } -void event_format__fprintf(struct event_format *event, +void event_format__fprintf(struct tep_event_format *event,  			   int cpu, void *data, int size, FILE *fp)  {  	struct tep_record record; @@ -130,7 +131,7 @@ void event_format__fprintf(struct event_format *event,  	trace_seq_destroy(&s);  } -void event_format__print(struct event_format *event, +void event_format__print(struct tep_event_format *event,  			 int cpu, void *data, int size)  {  	return event_format__fprintf(event, cpu, data, size, stdout); @@ -158,22 +159,22 @@ void parse_ftrace_printk(struct tep_handle *pevent,  		printk = strdup(fmt+1);  		line = strtok_r(NULL, "\n", &next);  		tep_register_print_string(pevent, printk, addr); +		free(printk);  	}  }  void parse_saved_cmdline(struct tep_handle *pevent,  			 char *file, unsigned int size __maybe_unused)  { -	char *comm; +	char comm[17]; /* Max comm length in the kernel is 16. */  	char *line;  	char *next = NULL;  	int pid;  	line = strtok_r(file, "\n", &next);  	while (line) { -		sscanf(line, "%d %ms", &pid, &comm); -		tep_register_comm(pevent, comm, pid); -		free(comm); +		if (sscanf(line, "%d %16s", &pid, comm) == 2) +			tep_register_comm(pevent, comm, pid);  		line = strtok_r(NULL, "\n", &next);  	}  } @@ -189,29 +190,33 @@ int parse_event_file(struct tep_handle *pevent,  	return tep_parse_event(pevent, buf, size, sys);  } -struct event_format *trace_find_next_event(struct tep_handle *pevent, -					   struct event_format *event) +struct tep_event_format *trace_find_next_event(struct tep_handle *pevent, +					       struct tep_event_format *event)  {  	static int idx; +	int events_count; +	struct tep_event_format *all_events; -	if (!pevent || !pevent->events) +	all_events = tep_get_first_event(pevent); +	events_count = tep_get_events_count(pevent); +	if (!pevent || !all_events || events_count < 1)  		return NULL;  	if (!event) {  		idx = 0; -		return pevent->events[0]; +		return all_events;  	} -	if (idx < pevent->nr_events && event == pevent->events[idx]) { +	if (idx < events_count && event == (all_events + idx)) {  		idx++; -		if (idx == pevent->nr_events) +		if (idx == events_count)  			return NULL; -		return pevent->events[idx]; +		return (all_events + idx);  	} -	for (idx = 1; idx < pevent->nr_events; idx++) { -		if (event == pevent->events[idx - 1]) -			return pevent->events[idx]; +	for (idx = 1; idx < events_count; idx++) { +		if (event == (all_events + (idx - 1))) +			return (all_events + idx);  	}  	return NULL;  }  | 
