libtraceevent(3)
================

NAME
----
tep_list_events, tep_list_events_copy -
Get list of events, sorted by given criteria.

SYNOPSIS
--------
[verse]
--
*#include <event-parse.h>*

enum *tep_event_sort_type* {
	_TEP_EVENT_SORT_ID_,
	_TEP_EVENT_SORT_NAME_,
	_TEP_EVENT_SORT_SYSTEM_,
};

struct tep_event pass:[*]pass:[*]*tep_list_events*(struct tep_handle pass:[*]_tep_, enum tep_event_sort_type _sort_type_);
struct tep_event pass:[*]pass:[*]*tep_list_events_copy*(struct tep_handle pass:[*]_tep_, enum tep_event_sort_type _sort_type_);
--

DESCRIPTION
-----------
The _tep_list_events()_ function returns an array of pointers to the events,
sorted by the _sort_type_ criteria. The last element of the array is NULL.
The returned memory must not be freed, it is managed by the library.
The function is not thread safe. The _tep_ argument is trace event parser
context. The _sort_type_ argument is the required sort criteria:
[verse]
--
	_TEP_EVENT_SORT_ID_	- sort by the event ID.
	_TEP_EVENT_SORT_NAME_	- sort by the event (name, system, id) triplet.
	_TEP_EVENT_SORT_SYSTEM_	- sort by the event (system, name, id) triplet.
--

The _tep_list_events_copy()_ is a thread safe version of _tep_list_events()_.
It has the same behavior, but the returned array is allocated internally and
must be freed by the caller. Note that the content of the array must not be
freed (see the EXAMPLE below).

RETURN VALUE
------------
The _tep_list_events()_ function returns an array of pointers to events.
In case of an error, NULL is returned. The returned array must not be freed,
it is managed by the library.

The _tep_list_events_copy()_ function returns an array of pointers to events.
In case of an error, NULL is returned. The returned array must be freed by
the caller.

EXAMPLE
-------
[source,c]
--
#include <event-parse.h>
...
struct tep_handle *tep = tep_alloc();
...
int i;
struct tep_event_format **events;

i=0;
events = tep_list_events(tep, TEP_EVENT_SORT_ID);
if (events == NULL) {
	/* Failed to get the events, sorted by ID */
} else {
	while(events[i]) {
		/* walk through the list of the events, sorted by ID */
		i++;
	}
}

i=0;
events = tep_list_events_copy(tep, TEP_EVENT_SORT_NAME);
if (events == NULL) {
	/* Failed to get the events, sorted by name */
} else {
	while(events[i]) {
		/* walk through the list of the events, sorted by name */
		i++;
	}
	free(events);
}

...
--

FILES
-----
[verse]
--
*event-parse.h*
	Header file to include in order to have access to the library APIs.
*-ltraceevent*
	Linker switch to add when building a program that uses the library.
--

SEE ALSO
--------
_libtraceevent(3)_, _trace-cmd(1)_

AUTHOR
------
[verse]
--
*Steven Rostedt* <rostedt@goodmis.org>, author of *libtraceevent*.
*Tzvetomir Stoyanov* <tz.stoyanov@gmail.com>, author of this man page.
--
REPORTING BUGS
--------------
Report bugs to  <linux-trace-devel@vger.kernel.org>

LICENSE
-------
libtraceevent is Free Software licensed under the GNU LGPL 2.1

RESOURCES
---------
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
