chiark / gitweb /
Drop my copyright headers
[elogind.git] / man / sd_bus_message_append.xml
1 <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*-->
2 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4
5 <!--
6   SPDX-License-Identifier: LGPL-2.1+
7 -->
8
9 <refentry id="sd_bus_message_append"
10           xmlns:xi="http://www.w3.org/2001/XInclude">
11
12   <refentryinfo>
13     <title>sd_bus_message_append</title>
14     <productname>systemd</productname>
15
16     <authorgroup>
17       <author>
18         <contrib>A monkey with a typewriter</contrib>
19         <firstname>Zbigniew</firstname>
20         <surname>Jędrzejewski-Szmek</surname>
21         <email>zbyszek@in.waw.pl</email>
22       </author>
23     </authorgroup>
24   </refentryinfo>
25
26   <refmeta>
27     <refentrytitle>sd_bus_message_append</refentrytitle>
28     <manvolnum>3</manvolnum>
29   </refmeta>
30
31   <refnamediv>
32     <refname>sd_bus_message_append</refname>
33     <refname>sd_bus_message_appendv</refname>
34
35     <refpurpose>Attach fields to a D-Bus message based on a type
36     string</refpurpose>
37   </refnamediv>
38
39   <refsynopsisdiv>
40     <funcsynopsis>
41       <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
42
43       <funcprototype>
44         <funcdef>int sd_bus_message_append</funcdef>
45         <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
46         <paramdef>const char *<parameter>types</parameter></paramdef>
47         <paramdef>…</paramdef>
48       </funcprototype>
49
50       <funcprototype>
51           <funcdef>int sd_bus_message_appendv</funcdef>
52           <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
53           <paramdef>const char *<parameter>types</parameter></paramdef>
54           <paramdef>va_list <parameter>ap</parameter></paramdef>
55       </funcprototype>
56
57     </funcsynopsis>
58   </refsynopsisdiv>
59
60   <refsect1>
61     <title>Description</title>
62
63     <para>The <function>sd_bus_message_append()</function> function
64     appends a sequence of fields to the D-Bus message object
65     <parameter>m</parameter>. The type string
66     <parameter>types</parameter> describes the types of the field
67     arguments that follow. For each type specified in the type string,
68     one or more arguments need to be specified, in the same order as
69     declared in the type string.</para>
70
71     <para>The type string is composed of the elements shown in the
72     table below. It contains zero or more single "complete types".
73     Each complete type may be one of the basic types or a fully
74     described container type. A container type may be a structure with
75     the contained types, a variant, an array with its element type, or
76     a dictionary entry with the contained types. The type string is
77     <constant>NUL</constant>-terminated.</para>
78
79     <para>In case of a basic type, one argument of the corresponding
80     type is expected.</para>
81
82     <para>A structure is denoted by a sequence of complete types
83     between <literal>(</literal> and <literal>)</literal>. This
84     sequence cannot be empty — it must contain at least one type.
85     Arguments corresponding to this nested sequence follow the same
86     rules as if they were not nested.</para>
87
88     <para>A variant is denoted by <literal>v</literal>. Corresponding
89     arguments must begin with a type string denoting a complete type,
90     and following that, arguments corresponding to the specified type.
91     </para>
92
93     <para>An array is denoted by <literal>a</literal> followed by a
94     complete type. Corresponding arguments must begin with the number of
95     entries in the array, followed by the entries themselves,
96     matching the element type of the array.</para>
97
98     <para>A dictionary is an array of dictionary entries, denoted by
99     <literal>a</literal> followed by a pair of complete types between
100     <literal>{</literal> and <literal>}</literal>. The first of those
101     types must be a basic type. Corresponding arguments must begin
102     with the number of dictionary entries, followed by a pair of
103     values for each entry matching the element type of
104     the dictionary entries.</para>
105
106     <para>The <function>sd_bus_message_appendv()</function> is equivalent to
107     the function <function>sd_bus_message_append()</function>,
108     except that it is called with a <literal>va_list</literal> instead of
109     a variable number of arguments. This function does not call the
110     <function>va_end()</function> macro. Because it invokes the
111     <function>va_arg()</function> macro, the value of ap
112     is undefined after the call.</para>
113
114     <para>For further details on the D-Bus type system, please consult
115     the <ulink
116     url="http://dbus.freedesktop.org/doc/dbus-specification.html#type-system">D-Bus
117     Specification</ulink>.</para>
118
119     <table>
120       <title>Item type specifiers</title>
121
122       <tgroup cols='5'>
123         <xi:include href="sd_bus_message_append_basic.xml" xpointer="xpointer(//table[@id='format-specifiers'])//colspec" />
124         <xi:include href="sd_bus_message_append_basic.xml" xpointer="xpointer(//table[@id='format-specifiers']//thead)" />
125
126         <tbody>
127           <xi:include href="sd_bus_message_append_basic.xml" xpointer="xpointer(//table[@id='format-specifiers']//tbody/*)" />
128
129           <row>
130             <entry><literal>a</literal></entry>
131             <entry><constant>SD_BUS_TYPE_ARRAY</constant></entry>
132             <entry>array</entry>
133             <entry>determined by array type and size</entry>
134             <entry>int, followed by array contents</entry>
135           </row>
136
137           <row>
138             <entry><literal>v</literal></entry>
139             <entry><constant>SD_BUS_TYPE_VARIANT</constant></entry>
140             <entry>variant</entry>
141             <entry>determined by the type argument</entry>
142             <entry>signature string, followed by variant contents</entry>
143           </row>
144
145           <row>
146             <entry><literal>(</literal></entry>
147             <entry><constant>SD_BUS_TYPE_STRUCT_BEGIN</constant></entry>
148             <entry>array start</entry>
149             <entry morerows="1">determined by the nested types</entry>
150             <entry morerows="1">structure contents</entry>
151           </row>
152           <row>
153             <entry><literal>)</literal></entry>
154             <entry><constant>SD_BUS_TYPE_STRUCT_END</constant></entry>
155             <entry>array end</entry>
156           </row>
157
158           <row>
159             <entry><literal>{</literal></entry>
160             <entry><constant>SD_BUS_TYPE_DICT_ENTRY_BEGIN</constant></entry>
161             <entry>dictionary entry start</entry>
162             <entry morerows="1">determined by the nested types</entry>
163             <entry morerows="1">dictionary contents</entry>
164           </row>
165           <row>
166             <entry><literal>}</literal></entry>
167             <entry><constant>SD_BUS_TYPE_DICT_ENTRY_END</constant></entry>
168             <entry>dictionary entry end</entry>
169           </row>
170        </tbody>
171       </tgroup>
172     </table>
173
174     <para>For types "s" and "g" (unicode string or signature), the pointer may be
175     <constant>NULL</constant>, which is equivalent to an empty string. See
176     <citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>
177     for the precise interpretation of those and other types.</para>
178
179   </refsect1>
180
181   <refsect1>
182     <title>Types String Grammar</title>
183
184     <programlisting>types ::= complete_type*
185 complete_type ::= basic_type | variant | structure | array | dictionary
186 basic_type ::= "y" | "n" | "q" | "u" | "i" | "x" | "t" | "d" |
187                "b" | "h" |
188                "s" | "o" | "g"
189 variant ::= "v"
190 structure ::= "(" complete_type+ ")"
191 array ::= "a" complete_type
192 dictionary ::= "a" "{" basic_type complete_type "}"
193 </programlisting>
194   </refsect1>
195
196   <refsect1>
197     <title>Examples</title>
198
199     <para>Append a single basic type (the string <literal>a string</literal>):
200     </para>
201
202     <programlisting>sd_bus_message *m;
203
204 sd_bus_message_append(m, "s", "a string");</programlisting>
205
206     <para>Append all types of integers:</para>
207
208     <programlisting>uint8_t y = 1;
209 int16_t n = 2;
210 uint16_t q = 3;
211 int32_t i = 4;
212 uint32_t u = 5;
213 int32_t x = 6;
214 uint32_t t = 7;
215 double d = 8.0;
216 sd_bus_message_append(m, "ynqiuxtd", y, n, q, i, u, x, t, d);</programlisting>
217
218      <para>Append a structure composed of a string and a D-Bus path:</para>
219
220      <programlisting>sd_bus_message_append(m, "(so)", "a string", "/a/path");
221 </programlisting>
222
223      <para>Append an array of UNIX file descriptors:</para>
224
225      <programlisting>sd_bus_message_append(m, "ah", 3, STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO);
226 </programlisting>
227
228      <para>Append a variant, with the real type "g" (signature),
229      and value "sdbusisgood":</para>
230
231      <programlisting>sd_bus_message_append(m, "v", "g", "sdbusisgood");</programlisting>
232
233      <para>Append a dictionary containing the mapping {1=>"a", 2=>"b", 3=>""}:
234      </para>
235
236      <programlisting>sd_bus_message_append(m, "a{is}", 3, 1, "a", 2, "b", 3, NULL);
237      </programlisting>
238   </refsect1>
239
240   <refsect1>
241     <title>Return Value</title>
242
243     <para>On success, these functions return 0 or a positive
244     integer. On failure, these functions return a negative
245     errno-style error code.</para>
246   </refsect1>
247
248   <xi:include href="sd_bus_message_append_basic.xml" xpointer="errors" />
249
250   <xi:include href="libelogind-pkgconfig.xml" />
251
252   <refsect1>
253     <title>See Also</title>
254
255     <para>
256       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
257       <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
258       <citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
259       <citerefentry><refentrytitle>sd_bus_message_append_array</refentrytitle><manvolnum>3</manvolnum></citerefentry>
260     </para>
261   </refsect1>
262
263 </refentry>