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