<?xml version='1.0'?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->

<refentry id="sd_bus_message_append_string_memfd"
          xmlns:xi="http://www.w3.org/2001/XInclude">

  <refentryinfo>
    <title>sd_bus_message_append_string_memfd</title>
    <productname>systemd</productname>
  </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>int <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>The 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>The <parameter>iov</parameter> argument 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>The
    <function>sd_bus_message_append_string_space()</function> function appends
    space for a string to message <parameter>m</parameter>. It behaves
    similar to <function>sd_bus_message_append_basic()</function> with
    type <literal>s</literal>, but instead of copying a string into
    the message, it returns a pointer to the destination area to
    the caller in pointer <parameter>p</parameter>. Space for the 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 return a negative
    errno-style error code.</para>

    <xi:include href="sd_bus_message_append_basic.xml" xpointer="errors" />
  </refsect1>

  <xi:include href="libsystemd-pkgconfig.xml" />

  <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="https://dbus.freedesktop.org/doc/dbus-specification.html">The D-Bus specification</ulink>
    </para>
  </refsect1>

</refentry>
