# sd_bus_message_new_method_error

systemd

sd_bus_message_new_method_error

3

sd_bus_message_new_method_error

sd_bus_message_new_method_errorf

sd_bus_message_new_method_errno

sd_bus_message_new_method_errnof

Create an error reply for a method call

\#include \<systemd/sd-bus.h\>

int sd_bus_message_new_method_error

sd_bus_message \*

call

sd_bus_message \*\*

m

const sd_bus_error \*

e

int sd_bus_message_new_method_errorf

sd_bus_message \*

call

sd_bus_message \*\*

m

const char \*

name

const char \*

format

…

int sd_bus_message_new_method_errno

sd_bus_message \*

call

sd_bus_message \*\*

m

int

error

const sd_bus_error \*

p

int sd_bus_message_new_method_errnof

sd_bus_message \*

call

sd_bus_message \*\*

m

int

error

const char \*

format

…

# Description

The `sd_bus_message_new_method_error()` function creates a new bus message object that is an error reply to the `call` message, and returns it in the `m` output parameter. The error information from error `e` is appended: the `name` field of `e` is used as the error identifier in the reply header (for example an error name such as `org.freedesktop.DBus.Error.NotSupported` or the equivalent symbolic `SD_BUS_ERROR_NOT_SUPPORTED`), and the `message` field is set as the human-readable error message string if present. The error `e` must have the `name` field set, see `sd_bus_error_is_set(3)`.

The `sd_bus_message_new_method_errorf()` function creates an error reply similarly to `sd_bus_message_new_method_error()`, but instead of a ready error structure, it takes an error identifier string `name`, plus a `printf(3)` format string `format` and corresponding arguments. An error reply is sent with the error identifier `name` and the formatted string as the message. `name` and `format` must not be `NULL`.

The `sd_bus_message_new_method_errno()` function creates an error reply similarly to `sd_bus_message_new_method_error()`, but in addition to the error structure `p`, it takes an `errno(3)` error value in parameter `error`. If the error `p` is set (see `sd_bus_error_is_set(3)`), it is used in the reply. Otherwise, `error` is translated to an error identifier and used to create a new error structure using `sd_bus_error_set_errno(3)` and that is used in the reply. (If `error` is zero, no error is actually set, and an error reply with no information is created.)

The `sd_bus_message_new_method_errnof()` function creates an error reply similarly to `sd_bus_message_new_method_error()`. It takes an `errno(3)` error value in parameter `error`, plus a `printf(3)` format string `format` and corresponding arguments. `%m` may be used in the format string to refer to the error string corresponding to the specified errno code. The error message is initialized using the error identifier generated from `error` and the formatted string. (If `error` is zero, no error is actually set, and an error reply with no information is created.)

# Return Value

These functions return 0 if the error reply was successfully created, and a negative errno-style error code otherwise.

## Errors

Returned errors may indicate the following problems:

`-EINVAL`  
The call message `call` or the output parameter `m` are `NULL`.

Message `call` is not a method call message.

The error `e` parameter to `sd_bus_message_new_method_error()` is not set, see `sd_bus_error_is_set(3)`.

`-EPERM`  
Message `call` has been sealed.

`-ENOTCONN`  
The bus to which message `call` is attached is not connected.

`-ENOMEM`  
Memory allocation failed.

# See Also

`systemd(1)`, `sd-bus(3)`