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

NAME
----
tep_parse_event, tep_parse_format - Parse the event format information

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

enum tep_errno *tep_parse_event*(struct tep_handle pass:[*]_tep_, const char pass:[*]_buf_, unsigned long _size_, const char pass:[*]_sys_);
enum tep_errno *tep_parse_format*(struct tep_handle pass:[*]_tep_, struct tep_event pass:[*]pass:[*]_eventp_, const char pass:[*]_buf_, unsigned long _size_, const char pass:[*]_sys_);
--

DESCRIPTION
-----------
The _tep_parse_event()_ function parses the event format and creates an event
structure to quickly parse raw data for a given event. The _tep_ argument is
the trace event parser context. The created event structure is stored in the
_tep_ context. The _buf_ argument is a buffer with _size_, where the event
format data is. The event format data can be taken from
tracefs/events/.../.../format files. The _sys_ argument is the system of
the event.

The _tep_parse_format()_ function does the same as _tep_parse_event()_. The only
difference is in the extra _eventp_ argument, where the newly created event
structure is returned.

RETURN VALUE
------------
Both _tep_parse_event()_ and _tep_parse_format()_ functions return 0 on success,
or TEP_ERRNO__... in case of an error.

EXAMPLE
-------
[source,c]
--
#include <event-parse.h>
...
struct tep_handle *tep = tep_alloc();
...
char *buf;
int size;
struct tep_event *event = NULL;
buf = read_file("/sys/kernel/tracing/events/ftrace/print/format", &size);
if (tep_parse_event(tep, buf, size, "ftrace") != 0) {
	/* Failed to parse the ftrace print format */
}

if (tep_parse_format(tep, &event, buf, size, "ftrace") != 0) {
	/* Failed to parse the ftrace print format */
}
...
--

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
