---
name: "sd_bus_message_new_method_error"
section: "3"
platform: "linux"
package: "systemd-libs"
version: "262.1-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/sd_bus_message_new_method_error"
---

# sd\_bus\_message\_new\_method\_error(3)

Create an error reply for a method call

## NAME

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

## SYNOPSIS

```
#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)](/sd_bus_error_is_set/3.md).

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)](/printf/3.md) 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)](/errno/3.md) error value in parameter *error*. If the error *p* is set (see [**sd\_bus\_error\_is\_set**(3)](/sd_bus_error_is_set/3.md)), 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)](/sd_bus_error_set_errno/3.md) 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)](/errno/3.md) error value in parameter *error*, plus a [**printf**(3)](/printf/3.md) 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)](/sd_bus_error_is_set/3.md).

**-EPERM**

Message *call* has been sealed.

**-ENOTCONN**

The bus to which message *call* is attached is not connected.

**-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)](/pkg-config/1.md) file.

All functions listed here are thread-agnostic and only a single thread may operate on a given object at any given time. Different threads may access the same object at different times. Multiple independent objects may be used from different threads in parallel.

The code described here uses [**getenv**(3)](/getenv/3.md), which is declared to be not multi-thread-safe. This means that the code calling the functions described here must not call [**setenv**(3)](/setenv/3.md) 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.

## SEE ALSO

[**systemd**(1)](/systemd/1.md), [**sd-bus**(3)](/sd-bus/3.md)
