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

NAME
----
tep_read_number_field - Reads a number from raw data.

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

int *tep_read_number_field*(struct tep_format_field pass:[*]_field_, const void pass:[*]_data_, unsigned long long pass:[*]_value_);
--

DESCRIPTION
-----------
The _tep_read_number_field()_ function reads the value of the _field_ from the
raw _data_ and stores it in the _value_. The function sets the _value_ according
to the endianness of the raw data and the current machine and stores it in
_value_.

RETURN VALUE
------------
The _tep_read_number_field()_ function retunrs 0 in case of success, or -1 in
case of an error.

EXAMPLE
-------
[source,c]
--
#include <event-parse.h>
...
struct tep_handle *tep = tep_alloc();
...
struct tep_event *event = tep_find_event_by_name(tep, "timer", "hrtimer_start");
...
void process_record(struct tep_record *record)
{
	unsigned long long pid;
	struct tep_format_field *field_pid = tep_find_common_field(event, "common_pid");

	if (tep_read_number_field(field_pid, record->data, &pid) != 0) {
		/* Failed to get "common_pid" value */
	}
}
...
--
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
