]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/libsystemd/sd-bus/bus-error.h
Merge pull request #11827 from keszybz/pkgconfig-variables
[thirdparty/systemd.git] / src / libsystemd / sd-bus / bus-error.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
de1c301e
LP
2#pragma once
3
718db961
LP
4#include <stdbool.h>
5
de1c301e 6#include "sd-bus.h"
71d35b6b 7
9bfa2c02 8#include "macro.h"
de1c301e 9
fbfa72b0 10bool bus_error_is_dirty(sd_bus_error *e);
e3017af9
LP
11
12const char *bus_error_message(const sd_bus_error *e, int error);
40ca29a1 13
9bfa2c02
LP
14int bus_error_setfv(sd_bus_error *e, const char *name, const char *format, va_list ap) _printf_(3,0);
15int bus_error_set_errnofv(sd_bus_error *e, int error, const char *format, va_list ap) _printf_(3,0);
5f86c1f4
LP
16
17#define BUS_ERROR_OOM SD_BUS_ERROR_MAKE_CONST(SD_BUS_ERROR_NO_MEMORY, "Out of memory")
18#define BUS_ERROR_FAILED SD_BUS_ERROR_MAKE_CONST(SD_BUS_ERROR_FAILED, "Operation failed")
19
20/*
21 * There are two ways to register error maps with the error translation
22 * logic: by using BUS_ERROR_MAP_ELF_REGISTER, which however only
23 * works when linked into the same ELF module, or via
24 * sd_bus_error_add_map() which is the official, external API, that
25 * works from any module.
26 *
27 * Note that BUS_ERROR_MAP_ELF_REGISTER has to be used as decorator in
28 * the bus error table, and BUS_ERROR_MAP_ELF_USE has to be used at
29 * least once per compilation unit (i.e. per library), to ensure that
30 * the error map is really added to the final binary.
31 */
32
33#define BUS_ERROR_MAP_ELF_REGISTER \
a8986035
LP
34 _section_("SYSTEMD_BUS_ERROR_MAP") \
35 _used_ \
02e06226
LP
36 _alignptr_ \
37 _variable_no_sanitize_address_
5f86c1f4
LP
38
39#define BUS_ERROR_MAP_ELF_USE(errors) \
40 extern const sd_bus_error_map errors[]; \
a8986035 41 _used_ \
012c2f76 42 static const sd_bus_error_map * const CONCATENATE(errors ## _copy_, __COUNTER__) = errors;
5f86c1f4
LP
43
44/* We use something exotic as end marker, to ensure people build the
45 * maps using the macsd-ros. */
46#define BUS_ERROR_MAP_END_MARKER -'x'
47
96aad8d1 48BUS_ERROR_MAP_ELF_USE(bus_standard_errors);