sd_bus_message_read_basic — Read a basic type from a message

Synopsis

#include <systemd/sd-bus.h>

int sd_bus_message_read_basic(sd_bus_message *m, char type, void *p);

Description

sd_bus_message_read_basic() reads a basic type from a message and advances the read position in the message. The set of basic types and their ascii codes passed in type are described in the D-Bus Specification[1].

If p is not NULL, it should contain a pointer to an appropriate object. For example, if type is 'y', the object passed in p should have type uint8_t *. If type is 's', the object passed in p should have type const char **. Note that, if the basic type is a pointer (e.g., const char * in the case of a string), the pointer is only borrowed and the contents must be copied if they are to be used after the end of the messages lifetime. Similarly, during the lifetime of such a pointer, the message must not be modified. See the table below for a complete list of allowed types.

Table 1. Item type specifiers

Specifier Constant Description Expected C Type
"y" SD_BUS_TYPE_BYTE unsigned integer uint8_t *
"b" SD_BUS_TYPE_BOOLEAN boolean int *
"n" SD_BUS_TYPE_INT16 signed integer int16_t *
"q" SD_BUS_TYPE_UINT16 unsigned integer uint16_t *
"i" SD_BUS_TYPE_INT32 signed integer int32_t *
"u" SD_BUS_TYPE_UINT32 unsigned integer uint32_t *
"x" SD_BUS_TYPE_INT64 signed integer int64_t *
"t" SD_BUS_TYPE_UINT64 unsigned integer uint64_t *
"d" SD_BUS_TYPE_DOUBLE floating-point double *
"s" SD_BUS_TYPE_STRING Unicode string const char **
"o" SD_BUS_TYPE_OBJECT_PATH object path const char **
"g" SD_BUS_TYPE_SIGNATURE signature const char **
"h" SD_BUS_TYPE_UNIX_FD UNIX file descriptor int *

If there is no object of the specified type at the current position in the message, an error is returned.

Return Value

On success, sd_bus_message_read_basic() 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 type string is invalid or the message parameter is NULL.

-ENXIO

The message does not contain the specified type at current position.

-EBADMSG

The message cannot be parsed.

See Also

systemd(1), sd-bus(3), sd_bus_message_append_basic(3), sd_bus_message_skip(3), sd_bus_message_read(3)

Notes

1.

D-Bus Specification
https://dbus.freedesktop.org/doc/dbus-specification.html

Referenced By

sd-bus(3), sd_bus_message_append_basic(3), sd_bus_message_read(3), sd_bus_message_skip(3), systemd.directives(7), systemd.index(7).

systemd 244