2018-07-03 00:15:39 +03:00
<?xml version='1.0'?>
2016-06-21 18:52:32 +03:00
< !DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!--
2017-11-18 19:22:32 +03:00
SPDX-License-Identifier: LGPL-2.1+
2018-06-12 20:00:24 +03:00
Copyright © 2016 Julian Orth
2016-06-21 18:52:32 +03:00
-->
<refentry id= "sd_bus_message_read_basic" >
<refentryinfo >
<title > sd_bus_message_read_basic</title>
<productname > systemd</productname>
</refentryinfo>
<refmeta >
<refentrytitle > sd_bus_message_read_basic</refentrytitle>
<manvolnum > 3</manvolnum>
</refmeta>
<refnamediv >
<refname > sd_bus_message_read_basic</refname>
<refpurpose > Read a basic type from a message</refpurpose>
</refnamediv>
<refsynopsisdiv >
<funcsynopsis >
<funcsynopsisinfo > #include < systemd/sd-bus.h> </funcsynopsisinfo>
<funcprototype >
<funcdef > int <function > sd_bus_message_read_basic</function> </funcdef>
<paramdef > sd_bus_message *<parameter > m</parameter> </paramdef>
<paramdef > char <parameter > type</parameter> </paramdef>
<paramdef > void *<parameter > p</parameter> </paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
<refsect1 >
<title > Description</title>
<para >
<function > sd_bus_message_read_basic()</function> reads a basic type from a
message and advances the read position in the message. The set of basic
types and their ascii codes passed in <parameter > type</parameter> are
described in the <ulink
url="https://dbus.freedesktop.org/doc/dbus-specification.html">D-Bus
Specification</ulink> .
</para>
<para >
2018-07-03 02:11:11 +03:00
If <parameter > p</parameter> is not <constant > NULL</constant> , it should contain
a pointer to an appropriate object. For example, if <parameter > type</parameter>
is <constant > 'y'</constant> , the object passed in <parameter > p</parameter>
should have type <code > uint8_t *</code> . If <parameter > type</parameter> is
<constant > 's'</constant> , the object passed in <parameter > p</parameter> should
have type <code > const char **</code> . Note that, if the basic type is a pointer
(e.g., <code > const char *</code> in the case of a string), the pointer is only
borrowed and the contents must be copied if they are to be used after the end
of the messages lifetime. Similarly, during the lifetime of such a pointer, the
message must not be modified. See the table below for a complete list of allowed
types.
2016-06-21 18:52:32 +03:00
</para>
2018-07-03 02:11:11 +03:00
<table id= 'format-specifiers' >
<title > Item type specifiers</title>
<tgroup cols= '4' >
<colspec colname= 'specifier' />
<colspec colname= 'constant' />
<colspec colname= 'description' />
<colspec colname= 'ctype' />
<thead >
<row >
<entry > Specifier</entry>
<entry > Constant</entry>
<entry > Description</entry>
<entry > Expected C Type</entry>
</row>
</thead>
<tbody >
<row >
<entry > <literal > y</literal> </entry>
<entry > <constant > SD_BUS_TYPE_BYTE</constant> </entry>
<entry > unsigned integer</entry>
<entry > uint8_t *</entry>
</row>
<row >
<entry > <literal > b</literal> </entry>
<entry > <constant > SD_BUS_TYPE_BOOLEAN</constant> </entry>
<entry > boolean</entry>
<entry > int *</entry>
</row>
<row >
<entry > <literal > n</literal> </entry>
<entry > <constant > SD_BUS_TYPE_INT16</constant> </entry>
<entry > signed integer</entry>
<entry > int16_t *</entry>
</row>
<row >
<entry > <literal > q</literal> </entry>
<entry > <constant > SD_BUS_TYPE_UINT16</constant> </entry>
<entry > unsigned integer</entry>
<entry > uint16_t *</entry>
</row>
<row >
<entry > <literal > i</literal> </entry>
<entry > <constant > SD_BUS_TYPE_INT32</constant> </entry>
<entry > signed integer</entry>
<entry > int32_t *</entry>
</row>
<row >
<entry > <literal > u</literal> </entry>
<entry > <constant > SD_BUS_TYPE_UINT32</constant> </entry>
<entry > unsigned integer</entry>
<entry > uint32_t *</entry>
</row>
<row >
<entry > <literal > x</literal> </entry>
<entry > <constant > SD_BUS_TYPE_INT64</constant> </entry>
<entry > signed integer</entry>
<entry > int64_t *</entry>
</row>
<row >
<entry > <literal > t</literal> </entry>
<entry > <constant > SD_BUS_TYPE_UINT64</constant> </entry>
<entry > unsigned integer</entry>
<entry > uint64_t *</entry>
</row>
<row >
<entry > <literal > d</literal> </entry>
<entry > <constant > SD_BUS_TYPE_DOUBLE</constant> </entry>
<entry > floating-point</entry>
<entry > double *</entry>
</row>
<row >
<entry > <literal > s</literal> </entry>
<entry > <constant > SD_BUS_TYPE_STRING</constant> </entry>
<entry > Unicode string</entry>
<entry > const char **</entry>
</row>
<row >
<entry > <literal > o</literal> </entry>
<entry > <constant > SD_BUS_TYPE_OBJECT_PATH</constant> </entry>
<entry > object path</entry>
<entry > const char **</entry>
</row>
<row >
<entry > <literal > g</literal> </entry>
<entry > <constant > SD_BUS_TYPE_SIGNATURE</constant> </entry>
<entry > signature</entry>
<entry > const char **</entry>
</row>
<row >
<entry > <literal > h</literal> </entry>
<entry > <constant > SD_BUS_TYPE_UNIX_FD</constant> </entry>
<entry > UNIX file descriptor</entry>
<entry > int *</entry>
</row>
</tbody>
</tgroup>
</table>
2016-06-21 18:52:32 +03:00
<para >
If there is no object of the specified type at the current position in the
message, an error is returned.
</para>
</refsect1>
<refsect1 >
<title > Return Value</title>
<para >
On success, <function > sd_bus_message_read_basic()</function> returns 0 or
a positive integer. On failure, it returns a negative errno-style error
code.
</para>
</refsect1>
2018-07-03 02:11:11 +03:00
<refsect1 id= 'errors' >
<title > Errors</title>
<para > Returned errors may indicate the following problems:</para>
<variablelist >
<varlistentry >
<term > <constant > -EINVAL</constant> </term>
<listitem > <para > Specified type string is invalid or the message parameter is
<constant > NULL</constant> .</para> </listitem>
</varlistentry>
<varlistentry >
<term > <constant > -ENXIO</constant> </term>
<listitem > <para > The message does not contain the specified type at current
position.</para> </listitem>
</varlistentry>
<varlistentry >
<term > <constant > -EBADMSG</constant> </term>
<listitem > <para > The message cannot be parsed.</para> </listitem>
</varlistentry>
</variablelist>
</refsect1>
2016-06-21 18:52:32 +03:00
<refsect1 >
<title > See Also</title>
<para >
<citerefentry > <refentrytitle > systemd</refentrytitle> <manvolnum > 1</manvolnum> </citerefentry> ,
<citerefentry > <refentrytitle > sd-bus</refentrytitle> <manvolnum > 3</manvolnum> </citerefentry> ,
2018-07-03 02:11:11 +03:00
<citerefentry > <refentrytitle > sd_bus_message_append_basic</refentrytitle> <manvolnum > 3</manvolnum> </citerefentry> ,
2018-08-11 10:35:26 +03:00
<citerefentry > <refentrytitle > sd_bus_message_skip</refentrytitle> <manvolnum > 3</manvolnum> </citerefentry> ,
2018-07-03 02:11:11 +03:00
<citerefentry > <refentrytitle > sd_bus_message_read</refentrytitle> <manvolnum > 3</manvolnum> </citerefentry>
2016-06-21 18:52:32 +03:00
</para>
</refsect1>
</refentry>