chiark / gitweb /
man: describe functions for appending to messages
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 7 Mar 2014 04:24:20 +0000 (23:24 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 7 Mar 2014 04:24:20 +0000 (23:24 -0500)
Makefile-man.am
man/sd_bus_message_append.xml [new file with mode: 0644]
man/sd_bus_message_append_array.xml [new file with mode: 0644]
man/sd_bus_message_append_basic.xml [new file with mode: 0644]
man/sd_bus_message_append_string_memfd.xml [new file with mode: 0644]
man/sd_bus_message_append_strv.xml [new file with mode: 0644]
src/libsystemd/sd-bus/test-bus-marshal.c

index 40810e3..c232f48 100644 (file)
@@ -688,6 +688,11 @@ MANPAGES += \
        man/sd_bus_creds_new_from_pid.3 \
        man/sd_bus_error.3 \
        man/sd_bus_label_escape.3 \
+       man/sd_bus_message_append.3 \
+       man/sd_bus_message_append_array.3 \
+       man/sd_bus_message_append_basic.3 \
+       man/sd_bus_message_append_string_memfd.3 \
+       man/sd_bus_message_append_strv.3 \
        man/sd_bus_message_get_cookie.3 \
        man/sd_bus_message_get_monotonic_usec.3 \
        man/sd_bus_new.3 \
@@ -734,6 +739,11 @@ MANPAGES_ALIAS += \
        man/sd_bus_error_set_errno.3 \
        man/sd_bus_error_set_errnof.3 \
        man/sd_bus_label_unescape.3 \
+       man/sd_bus_message_append_array_iovec.3 \
+       man/sd_bus_message_append_array_memfd.3 \
+       man/sd_bus_message_append_array_space.3 \
+       man/sd_bus_message_append_string_iovec.3 \
+       man/sd_bus_message_append_string_space.3 \
        man/sd_bus_message_get_realtime_usec.3 \
        man/sd_bus_message_get_reply_cookie.3 \
        man/sd_bus_message_get_seqnum.3 \
@@ -782,6 +792,11 @@ man/sd_bus_error_set_const.3: man/sd_bus_error.3
 man/sd_bus_error_set_errno.3: man/sd_bus_error.3
 man/sd_bus_error_set_errnof.3: man/sd_bus_error.3
 man/sd_bus_label_unescape.3: man/sd_bus_label_escape.3
+man/sd_bus_message_append_array_iovec.3: man/sd_bus_message_append_array.3
+man/sd_bus_message_append_array_memfd.3: man/sd_bus_message_append_array.3
+man/sd_bus_message_append_array_space.3: man/sd_bus_message_append_array.3
+man/sd_bus_message_append_string_iovec.3: man/sd_bus_message_append_string_memfd.3
+man/sd_bus_message_append_string_space.3: man/sd_bus_message_append_string_memfd.3
 man/sd_bus_message_get_realtime_usec.3: man/sd_bus_message_get_monotonic_usec.3
 man/sd_bus_message_get_reply_cookie.3: man/sd_bus_message_get_cookie.3
 man/sd_bus_message_get_seqnum.3: man/sd_bus_message_get_monotonic_usec.3
@@ -906,6 +921,21 @@ man/sd_bus_error_set_errnof.html: man/sd_bus_error.html
 man/sd_bus_label_unescape.html: man/sd_bus_label_escape.html
        $(html-alias)
 
+man/sd_bus_message_append_array_iovec.html: man/sd_bus_message_append_array.html
+       $(html-alias)
+
+man/sd_bus_message_append_array_memfd.html: man/sd_bus_message_append_array.html
+       $(html-alias)
+
+man/sd_bus_message_append_array_space.html: man/sd_bus_message_append_array.html
+       $(html-alias)
+
+man/sd_bus_message_append_string_iovec.html: man/sd_bus_message_append_string_memfd.html
+       $(html-alias)
+
+man/sd_bus_message_append_string_space.html: man/sd_bus_message_append_string_memfd.html
+       $(html-alias)
+
 man/sd_bus_message_get_realtime_usec.html: man/sd_bus_message_get_monotonic_usec.html
        $(html-alias)
 
@@ -1355,6 +1385,11 @@ EXTRA_DIST += \
        man/sd_bus_creds_new_from_pid.xml \
        man/sd_bus_error.xml \
        man/sd_bus_label_escape.xml \
+       man/sd_bus_message_append.xml \
+       man/sd_bus_message_append_array.xml \
+       man/sd_bus_message_append_basic.xml \
+       man/sd_bus_message_append_string_memfd.xml \
+       man/sd_bus_message_append_strv.xml \
        man/sd_bus_message_get_cookie.xml \
        man/sd_bus_message_get_monotonic_usec.xml \
        man/sd_bus_new.xml \
diff --git a/man/sd_bus_message_append.xml b/man/sd_bus_message_append.xml
new file mode 100644 (file)
index 0000000..2a1e95a
--- /dev/null
@@ -0,0 +1,254 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+This file is part of systemd.
+
+Copyright 2014 Zbigniew Jędrzejewski-Szmek
+
+systemd is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+systemd is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="sd_bus_message_append" conditional="ENABLE_KDBUS"
+          xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>sd_bus_message_append</title>
+    <productname>systemd</productname>
+
+    <authorgroup>
+      <author>
+        <contrib>A monkey with a typewriter</contrib>
+        <firstname>Zbigniew</firstname>
+        <surname>Jędrzejewski-Szmek</surname>
+        <email>zbyszek@in.waw.pl</email>
+      </author>
+    </authorgroup>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_bus_message_append</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_bus_message_append</refname>
+
+    <refpurpose>Attach parts of message based on a format string</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>int sd_bus_message_append</funcdef>
+        <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
+        <paramdef>const char *<parameter>types</parameter></paramdef>
+        <paramdef>...</paramdef>
+      </funcprototype>
+    </funcsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para>Function <function>sd_bus_message_append</function> appends
+    a sequence of items to message <parameter>m</parameter>. The
+    format string <parameter>types</parameter> describes the types of
+    arguments that follow.</para>
+
+    <para>The format string is composed of the elements shown in the
+    table below. It contains zero or more single "complete types".
+    Each complete type may be one of the basic types or a fully
+    described container type. A container type may be a structure, a
+    variant type code, an array with its element type, or a dictionary
+    with its entry type. The format string is
+    <constant>NUL</constant>-terminated.</para>
+
+    <para>In case of a basic type, one argument of the corresponding
+    type is expected.</para>
+
+    <para>A structure is denoted by a sequence of complete types
+    between <literal>(</literal> and <literal>)</literal>. This
+    sequence cannot be empty — it must contain at least one type.
+    Arguments corresponding to this nested sequence follow the same
+    rules as if they were not nested.</para>
+
+    <para>A variant is denoted by <literal>v</literal>. Correspoding
+    arguments must include a format string denoting a complete type,
+    and following that, arguments corresponding to the specified type.
+    </para>
+
+    <para>An array is denoted by <literal>a</literal> followed by a
+    complete type. Corresponding arguments must include the size of
+    the array, and then repeated this number of times, arguments
+    corresponding to the nested type.</para>
+
+    <para>A dictionary is an array of dictionary entries, denoted by
+    <literal>a</literal> followed by a pair of complete types between
+    <literal>{</literal> and <literal>}</literal>. The first of those
+    types must be a basic type. Corresponding arguments must include
+    the size of the dictionary, and then repeated this number of
+    times, arguments corresponding to each of the two nested
+    types.</para>
+
+    <table>
+      <title>Item format specifiers</title>
+
+      <tgroup cols='4'>
+        <xi:include href="sd_bus_message_append_basic.xml" xpointer="xpointer(//table[@id='format-specifiers'])//colspec" />
+        <xi:include href="sd_bus_message_append_basic.xml" xpointer="xpointer(//table[@id='format-specifiers']//thead)" />
+
+        <tbody>
+          <xi:include href="sd_bus_message_append_basic.xml" xpointer="xpointer(//table[@id='format-specifiers']//tbody/*)" />
+
+          <row>
+            <entry><literal>a</literal></entry>
+            <entry><constant>SD_BUS_TYPE_ARRAY</constant></entry>
+            <entry>array</entry>
+            <entry>determined by array type and size</entry>
+          </row>
+
+          <row>
+            <entry><literal>v</literal></entry>
+            <entry><constant>SD_BUS_TYPE_VARIANT</constant></entry>
+            <entry>variant</entry>
+            <entry>determined by the type argument</entry>
+          </row>
+
+          <row>
+            <entry><literal>(</literal></entry>
+            <entry><constant>SD_BUS_TYPE_STRUCT_BEGIN</constant></entry>
+            <entry>array start</entry>
+            <entry morerows="1">determined by the nested types</entry>
+          </row>
+          <row>
+            <entry><literal>)</literal></entry>
+            <entry><constant>SD_BUS_TYPE_STRUCT_END</constant></entry>
+            <entry>array end</entry>
+          </row>
+
+          <row>
+            <entry><literal>{</literal></entry>
+            <entry><constant>SD_BUS_TYPE_DICT_ENTRY_BEGIN</constant></entry>
+            <entry>dictionary entry start</entry>
+            <entry morerows="1">determined by the nested types</entry>
+          </row>
+          <row>
+            <entry><literal>}</literal></entry>
+            <entry><constant>SD_BUS_TYPE_DICT_ENTRY_END</constant></entry>
+            <entry>dictionary entry end</entry>
+          </row>
+       </tbody>
+      </tgroup>
+    </table>
+  </refsect1>
+
+  <refsect1>
+    <title>Types string grammar</title>
+
+    <programlisting>types ::= complete_type*
+complete_type ::= basic_type | variant | structure | array | dictionary
+basic_type ::= "y" | "n" | "q" | "u" | "i" | "x" | "t" | "d" |
+               "b" | "h" |
+               "s" | "o" | "g"
+variant ::= "v"
+structure ::= "(" complete_type+ ")"
+array ::= "a" complete_type
+dictionary ::= "a" "{" basic_type complete_type "}"
+</programlisting>
+  </refsect1>
+
+  <refsect1>
+    <title>Examples</title>
+
+    <para>Append a single basic type (the string <literal>a string</literal>):
+    </para>
+
+    <programlisting>sd_bus_message *m;
+...
+sd_bus_message_append(m, "s", "a string");</programlisting>
+
+    <para>Append all types of integers:</para>
+
+    <programlisting>uint8_t y = 1;
+int16_t n = 2;
+uint16_t q = 3;
+int32_t i = 4;
+uint32_t u = 5;
+int32_t x = 6;
+uint32_t t = 7;
+double d = 8.0;
+sd_bus_message_append(m, "ynqiuxtd", y, n, q, i, u, x, t, d);</programlisting>
+
+     <para>Append a structure composed of string and a D-Bus path:</para>
+
+     <programlisting>sd_bus_message_append(m, "(so)", "a string", "/a/path");
+</programlisting>
+
+     <para>Append an array of UNIX file descriptors:</para>
+
+     <programlisting>sd_bus_message_append(m, "ah", 3, STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO);
+</programlisting>
+
+     <para>Append a variant, with the real type "g" (signature),
+     and value "sdbusisgood":</para>
+
+     <programlisting>sd_bus_message_append(m, "v", "g", "sdbusisgood");</programlisting>
+
+     <para>Append a dictionary containing the mapping {1=>"a", 2=>"b", 3=>""}:
+     </para>
+
+     <programlisting>sd_bus_message_append(m, "a{is}", 3, 1, "a", 2, "b", 3, NULL);
+     </programlisting>
+  </refsect1>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para>On success, this call returns 0 or a positive
+    integer. On failure, this call returns a negative
+    errno-style error code.</para>
+  </refsect1>
+
+  <xi:include href="sd_bus_message_append_basic.xml" xpointer="errors" />
+
+  <refsect1>
+    <title>Notes</title>
+
+    <para><function>sd_bus_open_user()</function> and other functions
+    described here are available as a shared library, which can be
+    compiled and linked to with the
+    <constant>libsystemd-bus</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    file.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_bus_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_bus_ref</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_bus_unref</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>ssh</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/sd_bus_message_append_array.xml b/man/sd_bus_message_append_array.xml
new file mode 100644 (file)
index 0000000..fe84671
--- /dev/null
@@ -0,0 +1,190 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+This file is part of systemd.
+
+Copyright 2014 Zbigniew Jędrzejewski-Szmek
+
+systemd is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+systemd is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="sd_bus_message_append_array" conditional="ENABLE_KDBUS"
+          xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>sd_bus_message_append_array</title>
+    <productname>systemd</productname>
+
+    <authorgroup>
+      <author>
+        <contrib>A monkey with a typewriter</contrib>
+        <firstname>Zbigniew</firstname>
+        <surname>Jędrzejewski-Szmek</surname>
+        <email>zbyszek@in.waw.pl</email>
+      </author>
+    </authorgroup>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_bus_message_append_array</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_bus_message_append_array</refname>
+    <refname>sd_bus_message_append_array_memfd</refname>
+    <refname>sd_bus_message_append_array_iovec</refname>
+    <refname>sd_bus_message_append_array_space</refname>
+
+    <refpurpose>Attach an array of items to a message</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>int sd_bus_message_append_array</funcdef>
+        <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
+        <paramdef>char <parameter>type</parameter></paramdef>
+        <paramdef>char void *<parameter>ptr</parameter></paramdef>
+        <paramdef>size_t <parameter>size</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int sd_bus_message_append_array_memfd</funcdef>
+        <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
+        <paramdef>char <parameter>type</parameter></paramdef>
+        <paramdef>sd_memfd *<parameter>memfd</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int sd_bus_message_append_array_iovec</funcdef>
+        <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
+        <paramdef>char <parameter>type</parameter></paramdef>
+        <paramdef>const struct iovec *<parameter>iov</parameter></paramdef>
+        <paramdef>unsigned <parameter>n</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int sd_bus_message_append_array_space</funcdef>
+        <paramdef>char <parameter>type</parameter></paramdef>
+        <paramdef>size_t <parameter>size</parameter></paramdef>
+        <paramdef>char void **<parameter>ptr</parameter></paramdef>
+      </funcprototype>
+    </funcsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para>Function <function>sd_bus_message_append_array</function>
+    appends items to message <parameter>m</parameter> as the single
+    array. A container will be opened, items appended, and the
+    container closed. Parameter <parameter>type</parameter> determines
+    how pointer <parameter>p</parameter> is interpreted.
+    <parameter>type</parameter> must be one of the "trivial" types
+    <literal>y</literal>, <literal>n</literal>, <literal>q</literal>,
+    <literal>i</literal>, <literal>u</literal>, <literal>x</literal>,
+    <literal>t</literal>, <literal>d</literal> (but not
+    <literal>b</literal>), as defined by the
+    <ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html#basic-types">Basic Types</ulink>
+    section of the D-Bus specification, and listed in
+    <citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+    Pointer <parameter>p</parameter> must point to an array of of size
+    <parameter>size</parameter> bytes containing items of the
+    respective type. Size <parameter>size</parameter> must be a
+    multiple of the size of the type <parameter>type</parameter>. As a
+    special case, <parameter>p</parameter> may be
+    <constant>NULL</constant>, if <parameter>size</parameter> is 0.
+    </para>
+
+    <para>The memory pointed at by <parameter>p</parameter> is copied
+    into the memory area containing the message and may be changed
+    after this call.</para>
+
+    <para>Function
+    <function>sd_bus_message_append_array_memfd</function> appends
+    items to message <parameter>m</parameter>, similarly to
+    <function>sd_bus_message_append_array</function>. Contents of the
+    memory file descriptor <parameter>memfd</parameter> are used as
+    the contents of the array. Their size must be a multiple of the
+    size of the type <parameter>type</parameter>.</para>
+
+    <para>Descriptor <parameter>memfd</parameter> will be sealed
+    and cannot be modified after this call.</para>
+
+    <para>Function
+    <function>sd_bus_message_append_array_iovec</function> appends
+    items to message <parameter>m</parameter>, similarly to
+    <function>sd_bus_message_append_array</function>. Contents of the
+    iovec <parameter>iov</parameter> are used as the contents of the
+    array. The total size of <parameter>iov</parameter> payload (the
+    sum of <structfield>iov_len</structfield> fields) must be a multiple
+    of the size of the type <parameter>type</parameter>.</para>
+
+    <para>Pointer <parameter>iov</parameter> must point to
+    <parameter>n</parameter> <structname>struct iovec</structname>
+    structures. Each structure may have the
+    <structname>iov_base</structname> field set, in which case the
+    memory pointed to will be copied into the message, or unset, in
+    which case a block of zeros of length
+    <structname>iov_len</structname> bytes will be inserted. The
+    memory pointed at by <parameter>iov</parameter> may be changed
+    after this call.</para>
+
+    <para>Function
+    <function>sd_bus_message_append_array_space</function> appends
+    space for an array of items to message <parameter>m</parameter>.
+    It behaves the same as
+    <function>sd_bus_message_append_array</function>, but instead
+    of copying items to the message, it returns a pointer to the
+    destination area to the caller in pointer <parameter>p</parameter>.
+    </para>
+  </refsect1>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para>On success, those calls return 0 or a positive integer. On
+    failure, they returns a negative errno-style error code.</para>
+  </refsect1>
+
+  <xi:include href="sd_bus_message_append_basic.xml" xpointer="errors" />
+
+  <refsect1>
+    <title>Notes</title>
+
+    <para><function>sd_bus_append_array()</function> and other
+    functions described here are available as a shared library, which
+    can be compiled and linked to with the
+    <constant>libsystemd</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    file.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/sd_bus_message_append_basic.xml b/man/sd_bus_message_append_basic.xml
new file mode 100644 (file)
index 0000000..a8e91f9
--- /dev/null
@@ -0,0 +1,278 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+This file is part of systemd.
+
+Copyright 2014 Zbigniew Jędrzejewski-Szmek
+
+systemd is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+systemd is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="sd_bus_message_append_basic" conditional="ENABLE_KDBUS">
+
+  <refentryinfo>
+    <title>sd_bus_message_append_basic</title>
+    <productname>systemd</productname>
+
+    <authorgroup>
+      <author>
+        <contrib>A monkey with a typewriter</contrib>
+        <firstname>Zbigniew</firstname>
+        <surname>Jędrzejewski-Szmek</surname>
+        <email>zbyszek@in.waw.pl</email>
+      </author>
+    </authorgroup>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_bus_message_append_basic</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_bus_message_append_basic</refname>
+
+    <refpurpose>Attach a single part to a message</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>int sd_bus_message_append_basic</funcdef>
+        <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
+        <paramdef>char <parameter>type</parameter></paramdef>
+        <paramdef>char void *<parameter>p</parameter></paramdef>
+      </funcprototype>
+    </funcsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><function>sd_bus_message_append_basic</function> appends a
+    single item to the message <parameter>m</parameter>. Parameter
+    <parameter>type</parameter> determines how pointer
+    <parameter>p</parameter> is interpreted.
+    <parameter>type</parameter> must be one of the basic types
+    as defined by the
+
+    <ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html#basic-types">Basic Types</ulink>
+    section of the D-Bus specification, and listed in the table below.
+    </para>
+
+    <table id='format-specifiers'>
+      <title>Item format specifiers</title>
+
+      <tgroup cols='4'>
+        <colspec colname='specifier' />
+        <colspec colname='constant' />
+        <colspec colname='description' />
+        <colspec colname='size' />
+        <thead>
+          <row>
+            <entry>Specifier</entry>
+            <entry>Constant</entry>
+            <entry>Description</entry>
+            <entry>Size</entry>
+          </row>
+        </thead>
+        <tbody>
+          <row>
+            <entry><literal>y</literal></entry>
+            <entry><constant>SD_BUS_TYPE_BYTE</constant></entry>
+            <entry>unsigned interger</entry>
+            <entry>1 byte</entry>
+          </row>
+
+          <row>
+            <entry><literal>b</literal></entry>
+            <entry><constant>SD_BUS_TYPE_BOOLEAN</constant></entry>
+            <entry>boolean</entry>
+            <entry>4 bytes</entry>
+          </row>
+
+          <row>
+            <entry><literal>n</literal></entry>
+            <entry><constant>SD_BUS_TYPE_INT16</constant></entry>
+            <entry>signed integer</entry>
+            <entry>2 bytes</entry>
+          </row>
+
+          <row>
+            <entry><literal>q</literal></entry>
+            <entry><constant>SD_BUS_TYPE_UINT16</constant></entry>
+            <entry>unsigned integer</entry>
+            <entry>2 bytes</entry>
+          </row>
+
+          <row>
+            <entry><literal>i</literal></entry>
+            <entry><constant>SD_BUS_TYPE_INT32</constant></entry>
+            <entry>signed integer</entry>
+            <entry>4 bytes</entry>
+          </row>
+
+          <row>
+            <entry><literal>u</literal></entry>
+            <entry><constant>SD_BUS_TYPE_UINT32</constant></entry>
+            <entry>unsigned integer</entry>
+            <entry>4 bytes</entry>
+          </row>
+
+          <row>
+            <entry><literal>x</literal></entry>
+            <entry><constant>SD_BUS_TYPE_INT64</constant></entry>
+            <entry>signed integer</entry>
+            <entry>8 bytes</entry>
+          </row>
+
+          <row>
+            <entry><literal>t</literal></entry>
+            <entry><constant>SD_BUS_TYPE_UINT64</constant></entry>
+            <entry>unsigned integer</entry>
+            <entry>8 bytes</entry>
+          </row>
+
+          <row>
+            <entry><literal>d</literal></entry>
+            <entry><constant>SD_BUS_TYPE_DOUBLE</constant></entry>
+            <entry>floating-point</entry>
+            <entry>8 bytes</entry>
+          </row>
+
+          <row>
+            <entry><literal>s</literal></entry>
+            <entry><constant>SD_BUS_TYPE_STRING</constant></entry>
+            <entry>Unicode string</entry>
+            <entry>variable</entry>
+          </row>
+
+          <row>
+            <entry><literal>o</literal></entry>
+            <entry><constant>SD_BUS_TYPE_OBJECT_PATH</constant></entry>
+            <entry>object path</entry>
+            <entry>variable</entry>
+          </row>
+
+          <row>
+            <entry><literal>g</literal></entry>
+            <entry><constant>SD_BUS_TYPE_SIGNATURE</constant></entry>
+            <entry>signature</entry>
+            <entry>variable</entry>
+          </row>
+
+          <row>
+            <entry><literal>h</literal></entry>
+            <entry><constant>SD_BUS_TYPE_UNIX_FD</constant></entry>
+            <entry>UNIX file descriptor</entry>
+            <entry>4 bytes</entry>
+          </row>
+       </tbody>
+      </tgroup>
+    </table>
+
+    <para>The value of the parameter is copied into the memory area
+    containing the message and may be changed after this call. If
+    <parameter>type</parameter> is <literal>h</literal> (UNIX file
+    descriptor), it is always "consumed" by this call, and either
+    successfully appended to the message or closed.</para>
+
+    <para>For types <literal>s</literal>, <literal>o</literal>, and
+    <literal>g</literal>, the parameter <parameter>p</parameter> is
+    interpreted as a pointer to a <constant>NUL</constant>-terminated
+    character sequence. As a special case, a <constant>NULL</constant>
+    pointer is interpreted as an empty string. The string should be
+    valid Unicode string encoded as UTF-8. In case of the two latter
+    types, additionally the requirements for a D-Bus object path or
+    type signature should be satisfied. Those requirements should be
+    verified by the recepient of the message.
+    </para>
+  </refsect1>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para>On success, this call returns 0 or a positive integer. On
+    failure, it returns a negative errno-style error code.</para>
+  </refsect1>
+
+  <refsect1 id='errors'>
+    <title>Errors</title>
+
+    <para>Returned errors may indicate the following problems:</para>
+
+    <variablelist>
+
+      <varlistentry>
+        <term><varname>-EINVAL</varname></term>
+
+        <listitem><para>Specified parameter is invalid.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>-EPERM</varname></term>
+
+        <listitem><para>Message has been sealed.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>-ESTALE</varname></term>
+
+        <listitem><para>Message is in invalid state.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>-ENXIO</varname></term>
+
+        <listitem><para>Message cannot be appended to.
+        </para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><varname>-ENOMEM</varname></term>
+
+        <listitem><para>Memory allocation failed.</para></listitem>
+      </varlistentry>
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>Notes</title>
+
+    <para><function>sd_bus_append_basic()</function> function
+    described here is available as a shared library, which can be
+    compiled and linked to with the
+    <constant>libsystemd</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    file.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/sd_bus_message_append_string_memfd.xml b/man/sd_bus_message_append_string_memfd.xml
new file mode 100644 (file)
index 0000000..a9b8924
--- /dev/null
@@ -0,0 +1,153 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+This file is part of systemd.
+
+Copyright 2014 Zbigniew Jędrzejewski-Szmek
+
+systemd is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+systemd is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="sd_bus_message_append_string_memfd" conditional="ENABLE_KDBUS"
+          xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>sd_bus_message_append_string_memfd</title>
+    <productname>systemd</productname>
+
+    <authorgroup>
+      <author>
+        <contrib>A monkey with a typewriter</contrib>
+        <firstname>Zbigniew</firstname>
+        <surname>Jędrzejewski-Szmek</surname>
+        <email>zbyszek@in.waw.pl</email>
+      </author>
+    </authorgroup>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_bus_message_append_string_memfd</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_bus_message_append_string_memfd</refname>
+    <refname>sd_bus_message_append_string_iovec</refname>
+    <refname>sd_bus_message_append_string_space</refname>
+
+    <refpurpose>Attach a string to a message</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>int sd_bus_message_append_string_memfd</funcdef>
+        <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
+        <paramdef>sd_memfd *<parameter>memfd</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int sd_bus_message_append_string_iovec</funcdef>
+        <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
+        <paramdef>const struct iovec *<parameter>iov</parameter></paramdef>
+        <paramdef>unsigned <parameter>n</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int sd_bus_message_append_string_space</funcdef>
+        <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
+        <paramdef>size_t <parameter>size</parameter></paramdef>
+        <paramdef>char **<parameter>s</parameter></paramdef>
+      </funcprototype>
+    </funcsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para>Functions
+    <function>sd_bus_message_append_string_memfd</function> and
+    <function>sd_bus_message_append_string_iovec</function> can be
+    used to append a single string (item of type <literal>s</literal>)
+    to message <parameter>m</parameter>.</para>
+
+    <para>In case of
+    <function>sd_bus_message_append_string_memfd</function> the
+    contents of <parameter>memfd</parameter> are the string. They must
+    satisfy the same constraints as described for the
+    <literal>s</literal> type in
+    <citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+
+    <para>In case of
+    <function>sd_bus_message_append_string_iovec</function> the
+    payload of <parameter>iov</parameter> is the string. It must
+    satisfy the same constraints as described for the
+    <literal>s</literal> type in
+    <citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+
+    <para>Pointer <parameter>iov</parameter> must point to
+    <parameter>n</parameter> <structname>struct iovec</structname>
+    structures. Each structure may have the
+    <structname>iov_base</structname> field set, in which case the
+    memory pointed to will be copied into the message, or unset, in
+    which case a block of spaces (ASCII 32) of length
+    <structname>iov_len</structname> will be inserted. The
+    memory pointed at by <parameter>iov</parameter> may be changed
+    after this call.</para>
+
+    <para>Function
+    <function>sd_bus_message_append_string_space</function> appends
+    space for a string to message <parameter>m</parameter>. If behaves
+    similarly to <function>sd_bus_message_append_basic</function> with
+    type <literal>s</literal>, but instead of copying a string into
+    the the message, it returns a pointer to the destination area to
+    the caller in pointer <parameter>p</parameter>. Space for string
+    of length <parameter>size</parameter> plus the terminating
+    <constant>NUL</constant> is allocated.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para>On success, those calls return 0 or a positive integer. On
+    failure, they returns a negative errno-style error code.</para>
+  </refsect1>
+
+  <xi:include href="sd_bus_message_append_basic.xml" xpointer="errors" />
+
+  <refsect1>
+    <title>Notes</title>
+
+    <para>Functions described here are available as a shared library,
+    which can be compiled and linked to with the
+    <constant>libsystemd</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    file.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
+    </para>
+  </refsect1>
+
+</refentry>
diff --git a/man/sd_bus_message_append_strv.xml b/man/sd_bus_message_append_strv.xml
new file mode 100644 (file)
index 0000000..048bbca
--- /dev/null
@@ -0,0 +1,116 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+This file is part of systemd.
+
+Copyright 2014 Zbigniew Jędrzejewski-Szmek
+
+systemd is free software; you can redistribute it and/or modify it
+under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+systemd is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="sd_bus_message_append_strv" conditional="ENABLE_KDBUS"
+          xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>sd_bus_message_append_strv</title>
+    <productname>systemd</productname>
+
+    <authorgroup>
+      <author>
+        <contrib>A monkey with a typewriter</contrib>
+        <firstname>Zbigniew</firstname>
+        <surname>Jędrzejewski-Szmek</surname>
+        <email>zbyszek@in.waw.pl</email>
+      </author>
+    </authorgroup>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_bus_message_append_strv</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_bus_message_append_strv</refname>
+
+    <refpurpose>Attach an array of strings to a message</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>int sd_bus_message_append_strv</funcdef>
+        <paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
+        <paramdef>char **<parameter>l</parameter></paramdef>
+      </funcprototype>
+    </funcsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para>Function <function>sd_bus_message_append</function> can be
+    used to append an array of strings to message
+    <parameter>m</parameter>. Parameter <parameter>l</parameter>
+    points to a <constant>NULL</constant>-terminated array of pointers
+    to <constant>NUL</constant>-terminated strings. Each string must
+    satisfy the same constraints as described for the
+    <literal>s</literal> type in
+    <citerefentry><refentrytitle>sd_bus_message_append_basic</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+    </para>
+
+    <para>The memory pointed at by <parameter>p</parameter> and the
+    contents of the strings themselves are copied into the memory area
+    containing the message and may be changed after this call. Note
+    that the signature of <parameter>l</parameter> parameter is be
+    treated as <type>const char* const*</type>, and the the contents
+    will not be modified.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para>On success, this call returns 0 or a positive integer. On
+    failure, a negative errno-style error code is returned.</para>
+  </refsect1>
+
+  <xi:include href="sd_bus_message_append_basic.xml" xpointer="errors" />
+
+  <refsect1>
+    <title>Notes</title>
+
+    <para><function>sd_bus_append_append_strv()</function> function
+    described here is available as a shared library, which can be
+    compiled and linked to with the
+    <constant>libsystemd</constant> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+    file.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_bus_message_append_array</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <ulink url="http://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
+    </para>
+  </refsect1>
+
+</refentry>
index 85aaf95..d438a23 100644 (file)
@@ -79,6 +79,9 @@ int main(int argc, char *argv[]) {
         r = sd_bus_message_new_method_call(NULL, &m, "foobar.waldo", "/", "foobar.waldo", "Piep");
         assert_se(r >= 0);
 
+        r = sd_bus_message_append(m, "");
+        assert_se(r >= 0);
+
         r = sd_bus_message_append(m, "s", "a string");
         assert_se(r >= 0);