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

NAME
----
tep_get_any_field_val, tep_get_common_field_val, tep_get_field_val,
tep_get_field_raw - Get value of a field.

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

int *tep_get_any_field_val*(struct trace_seq pass:[*]_s_, struct tep_event pass:[*]_event_, const char pass:[*]_name_, struct tep_record pass:[*]_record_, unsigned long long pass:[*]_val_, int _err_);
int *tep_get_common_field_val*(struct trace_seq pass:[*]_s_, struct tep_event pass:[*]_event_, const char pass:[*]_name_, struct tep_record pass:[*]_record_, unsigned long long pass:[*]_val_, int _err_);
int *tep_get_field_val*(struct trace_seq pass:[*]_s_, struct tep_event pass:[*]_event_, const char pass:[*]_name_, struct tep_record pass:[*]_record_, unsigned long long pass:[*]_val_, int _err_);
void pass:[*]*tep_get_field_raw*(struct trace_seq pass:[*]_s_, struct tep_event pass:[*]_event_, const char pass:[*]_name_, struct tep_record pass:[*]_record_, int pass:[*]_len_, int _err_);
--

DESCRIPTION
-----------
These functions can be used to find a field and retrieve its value.

The _tep_get_any_field_val()_ function searches in the _record_ for a field
with _name_, part of the _event_. If the field is found, its value is stored in
_val_. If there is an error and _err_ is not zero, then an error string is
written into _s_.

The _tep_get_common_field_val()_ function does the same as
_tep_get_any_field_val()_, but searches only in the common fields. This works
for any event as all events include the common fields.

The _tep_get_field_val()_ function does the same as _tep_get_any_field_val()_,
but searches only in the event specific fields.

The _tep_get_field_raw()_ function searches in the _record_ for a field with
_name_, part of the _event_. If the field is found, a pointer to where the field
exists in the record's raw data is returned. The size of the data is stored in
_len_. If there is an error and _err_ is not zero, then an error string is
written into _s_.

RETURN VALUE
------------
The _tep_get_any_field_val()_, _tep_get_common_field_val()_ and
_tep_get_field_val()_ functions return 0 on success, or -1 in case of an error.

The _tep_get_field_raw()_ function returns a pointer to field's raw data, and
places the length of this data in _len_. In case of an error NULL is returned.

EXAMPLE
-------
[source,c]
--
#include <event-parse.h>
#include <trace-seq.h>
...
struct tep_handle *tep = tep_alloc();
...
struct tep_event *event = tep_find_event_by_name(tep, "kvm", "kvm_exit");
...
void process_record(struct tep_record *record)
{
	int len;
	char *comm;
	struct tep_event_format *event;
	unsigned long long val;

	event = tep_find_event_by_record(pevent, record);
	if (event != NULL) {
		if (tep_get_common_field_val(NULL, event, "common_type",
					     record, &val, 0) == 0) {
			/* Got the value of common type field */
		}
		if (tep_get_field_val(NULL, event, "pid", record, &val, 0) == 0) {
			/* Got the value of pid specific field */
		}
		comm = tep_get_field_raw(NULL, event, "comm", record, &len, 0);
		if (comm != NULL) {
			/* Got a pointer to the comm event specific field */
		}
	}
}
--

FILES
-----
[verse]
--
*event-parse.h*
	Header file to include in order to have access to the library APIs.
*trace-seq.h*
	Header file to include in order to have access to trace sequences
	related APIs. Trace sequences are used to allow a function to call
	several other functions to create a string of data to use.
*-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
