]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/libsystemd/sd-bus/bus-error.h
Merge pull request #18886 from anitazha/shutdownconsole
[thirdparty/systemd.git] / src / libsystemd / sd-bus / bus-error.h
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
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.
945317a4
FS
31 *
32 * In addition, set the retain attribute so that the section cannot be
33 * discarded by ld --gc-sections -z start-stop-gc. Older compilers would
34 * warn for the unknown attribute, so just disable -Wattributes.
5f86c1f4
LP
35 */
36
37#define BUS_ERROR_MAP_ELF_REGISTER \
945317a4 38 _Pragma("GCC diagnostic ignored \"-Wattributes\"") \
a8986035
LP
39 _section_("SYSTEMD_BUS_ERROR_MAP") \
40 _used_ \
945317a4 41 __attribute__((retain)) \
02e06226
LP
42 _alignptr_ \
43 _variable_no_sanitize_address_
5f86c1f4
LP
44
45#define BUS_ERROR_MAP_ELF_USE(errors) \
46 extern const sd_bus_error_map errors[]; \
a8986035 47 _used_ \
012c2f76 48 static const sd_bus_error_map * const CONCATENATE(errors ## _copy_, __COUNTER__) = errors;
5f86c1f4
LP
49
50/* We use something exotic as end marker, to ensure people build the
51 * maps using the macsd-ros. */
52#define BUS_ERROR_MAP_END_MARKER -'x'
53
96aad8d1 54BUS_ERROR_MAP_ELF_USE(bus_standard_errors);