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