---
name: "tep_list_events_copy"
section: "3"
platform: "linux"
package: "libtraceevent-doc"
version: "1:1.8.4-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/tep_list_events"
---

# tep\_list\_events\_copy(3)

Get list of events, sorted by given criteria.

Part of [tep\_list\_events(3)](/tep_list_events/3.md).

## NAME

tep\_list\_events, tep\_list\_events\_copy - Get list of events, sorted by given criteria.

## SYNOPSIS

```
#include <event-parse.h>
enum tep_event_sort_type {
        TEP_EVENT_SORT_ID,
        TEP_EVENT_SORT_NAME,
        TEP_EVENT_SORT_SYSTEM,
};
struct tep_event **tep_list_events(struct tep_handle *tep, enum tep_event_sort_type sort_type);
struct tep_event **tep_list_events_copy(struct tep_handle *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:

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

```
#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

```
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)](/libtraceevent/3.md), [**trace-cmd**(1)](/trace-cmd/1.md)

## AUTHOR

```
Steven Rostedt <rostedt@goodmis.org[1]>, author of libtraceevent.
Tzvetomir Stoyanov <tz.stoyanov@gmail.com[2]>, author of this man page.
```

## REPORTING BUGS

Report bugs to \<**linux-trace-devel@vger.kernel.org**\[3\]\>

## LICENSE

libtraceevent is Free Software licensed under the GNU LGPL 2.1

## RESOURCES

**https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/**

## NOTES

- 1\.

  rostedt@goodmis.org

  mailto:rostedt@goodmis.org

- 2\.

  tz.stoyanov@gmail.com

  mailto:tz.stoyanov@gmail.com

- 3\.

  linux-trace-devel@vger.kernel.org

  mailto:linux-trace-devel@vger.kernel.org
