---
name: "sd_bus_message_new_method_errno"
section: "3"
platform: "linux"
package: "libsystemd-dev"
version: "257.13-1~deb13u1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/sd_bus_message_new_method_error"
---

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

Create an error reply for a method call

Part of [sd\_bus\_message\_new\_method\_error(3)](/sd_bus_message_new_method_error/3.md).

## 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.

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)
