# sd_bus_message_append_basic

## NAME



           sd_bus_message_append_basic - Attach a single field to a message
    


## SYNOPSIS



           **#include <systemd/sd-bus.h>**
    
           **int sd_bus_message_append_basic(sd_bus_message ***_m_**, char** _type_**,**
                                           **const void ***_p_**);**
    


## DESCRIPTION



           **sd_bus_message_append_basic()** appends a single field to the
           message _m_. The parameter _type_ determines how the pointer _p_ is
           interpreted.  _type_ must be one of the basic types as defined by
           the **Basic Types******[1] section of the D-Bus specification, and listed
           in the table below.**Table 1. Item type specifiers**
           ┌───────────┬─────────────────────────┬────────────────┬──────────┬────────────┐
           │ **Specifier** │ **Constant** │ **Description** │ **Size** │ **Expected C** │
           │           │                         │                │          │ **Type** │
           ├───────────┼─────────────────────────┼────────────────┼──────────┼────────────┤
           │ "y"       │ **SD_BUS_TYPE_BYTE** │ unsigned       │ 1 byte   │ uint8_t    │
           │           │                         │ integer        │          │            │
           ├───────────┼─────────────────────────┼────────────────┼──────────┼────────────┤
           │ "b"       │ **SD_BUS_TYPE_BOOLEAN** │ boolean        │ 4 bytes  │ int        │
           ├───────────┼─────────────────────────┼────────────────┼──────────┼────────────┤
           │ "n"       │ **SD_BUS_TYPE_INT16** │ signed         │ 2 bytes  │ int16_t    │
           │           │                         │ integer        │          │            │
           ├───────────┼─────────────────────────┼────────────────┼──────────┼────────────┤
           │ "q"       │ **SD_BUS_TYPE_UINT16** │ unsigned       │ 2 bytes  │ uint16_t   │
           │           │                         │ integer        │          │            │
           ├───────────┼─────────────────────────┼────────────────┼──────────┼────────────┤
           │ "i"       │ **SD_BUS_TYPE_INT32** │ signed         │ 4 bytes  │ int32_t    │
           │           │                         │ integer        │          │            │
           ├───────────┼─────────────────────────┼────────────────┼──────────┼────────────┤
           │ "u"       │ **SD_BUS_TYPE_UINT32** │ unsigned       │ 4 bytes  │ uint32_t   │
           │           │                         │ integer        │          │            │
           ├───────────┼─────────────────────────┼────────────────┼──────────┼────────────┤
           │ "x"       │ **SD_BUS_TYPE_INT64** │ signed         │ 8 bytes  │ int64_t    │
           │           │                         │ integer        │          │            │
           ├───────────┼─────────────────────────┼────────────────┼──────────┼────────────┤
           │ "t"       │ **SD_BUS_TYPE_UINT64** │ unsigned       │ 8 bytes  │ uint64_t   │
           │           │                         │ integer        │          │            │
           ├───────────┼─────────────────────────┼────────────────┼──────────┼────────────┤
           │ "d"       │ **SD_BUS_TYPE_DOUBLE** │ floating-point │ 8 bytes  │ double     │
           ├───────────┼─────────────────────────┼────────────────┼──────────┼────────────┤
           │ "s"       │ **SD_BUS_TYPE_STRING** │ Unicode string │ variable │ char[]     │
           ├───────────┼─────────────────────────┼────────────────┼──────────┼────────────┤
           │ "o"       │ **SD_BUS_TYPE_OBJECT_PATH** │ object path    │ variable │ char[]     │
           ├───────────┼─────────────────────────┼────────────────┼──────────┼────────────┤
           │ "g"       │ **SD_BUS_TYPE_SIGNATURE** │ signature      │ variable │ char[]     │
           ├───────────┼─────────────────────────┼────────────────┼──────────┼────────────┤
           │ "h"       │ **SD_BUS_TYPE_UNIX_FD** │ UNIX file      │ 4 bytes  │ int        │
           │           │                         │ descriptor     │          │            │
           └───────────┴─────────────────────────┴────────────────┴──────────┴────────────┘
    
           The value of the parameter is copied into a memory area held by
           the message object, stays in the possession of the caller and may
           hence be freely changed after this call without affecting the bus
           message it has been added to. If _type_ is "h" (UNIX file
           descriptor), the descriptor is duplicated by this call and the
           passed descriptor stays in possession of the caller.
    
           For types "s", "o", and "g", the parameter _p_ is interpreted as a
           pointer to a **NUL** -terminated character sequence. As a special case,
           a **NULL** 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, the additional requirements for a D-Bus object
           path or type signature should be satisfied. Those requirements
           should be verified by the recipient of the message.
    


## RETURN VALUE



           On success, this call returns 0 or a positive integer. On failure,
           it returns a negative errno-style error code.
    
       **Errors**
           Returned errors may indicate the following problems:
    
           **-EINVAL**
               Specified parameter is invalid.
    
           **-EPERM**
               Message has been sealed.
    
           **-ESTALE**
               Message is in invalid state.
    
           **-ENXIO**
               Message cannot be appended to.
    
           **-ENOMEM**
               Memory allocation failed.
    


## NOTES



           Functions described here are available as a shared library, which
           can be compiled against and linked to with the
           **libsystemd pkg-config**(1) file.
    
           The code described here uses getenv(3), which is declared to be
           not multi-thread-safe. This means that the code calling the
           functions described here must not call setenv(3) from a parallel
           thread. It is recommended to only do calls to **setenv()** from an
           early phase of the program when no other threads have been
           started.
    


## NOTES



            1. Basic Types
               https://dbus.freedesktop.org/doc/dbus-specification.html#basic-types
    
            2. The D-Bus specification
               https://dbus.freedesktop.org/doc/dbus-specification.html
    


* * *