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

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

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

unsigned long long *tep_read_number*(struct tep_handle pass:[*]_tep_, const void pass:[*]_ptr_, int _size_);
--

DESCRIPTION
-----------
The _tep_read_number()_ function reads an integer from raw data, taking into
account the endianness of the raw data and the current host. The _tep_ argument
is the trace event parser context. The _ptr_ is a pointer to the raw data, where
the integer is, and the _size_ is the size of the integer.

RETURN VALUE
------------
The _tep_read_number()_ function returns the integer in the byte order of
the current host. In case of an error, 0 is returned.

EXAMPLE
-------
[source,c]
--
#include <event-parse.h>
...
struct tep_handle *tep = tep_alloc();
...
void process_record(struct tep_record *record)
{
	int offset = 24;
	int data = tep_read_number(tep, record->data + offset, 4);

	/* Read the 4 bytes at the offset 24 of data as an integer */
}
...
--

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
