]>
Commit | Line | Data |
---|---|---|
53e1b683 | 1 | /* SPDX-License-Identifier: LGPL-2.1+ */ |
de1c301e LP |
2 | #pragma once |
3 | ||
4 | /*** | |
5 | This file is part of systemd. | |
6 | ||
7 | Copyright 2013 Lennart Poettering | |
8 | ||
9 | systemd is free software; you can redistribute it and/or modify it | |
10 | under the terms of the GNU Lesser General Public License as published by | |
11 | the Free Software Foundation; either version 2.1 of the License, or | |
12 | (at your option) any later version. | |
13 | ||
14 | systemd is distributed in the hope that it will be useful, but | |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
17 | Lesser General Public License for more details. | |
18 | ||
19 | You should have received a copy of the GNU Lesser General Public License | |
20 | along with systemd; If not, see <http://www.gnu.org/licenses/>. | |
21 | ***/ | |
22 | ||
718db961 LP |
23 | #include <stdbool.h> |
24 | ||
de1c301e | 25 | #include "sd-bus.h" |
71d35b6b | 26 | |
9bfa2c02 | 27 | #include "macro.h" |
de1c301e | 28 | |
fbfa72b0 | 29 | bool bus_error_is_dirty(sd_bus_error *e); |
e3017af9 LP |
30 | |
31 | const char *bus_error_message(const sd_bus_error *e, int error); | |
40ca29a1 | 32 | |
9bfa2c02 LP |
33 | int bus_error_setfv(sd_bus_error *e, const char *name, const char *format, va_list ap) _printf_(3,0); |
34 | int bus_error_set_errnofv(sd_bus_error *e, int error, const char *format, va_list ap) _printf_(3,0); | |
5f86c1f4 LP |
35 | |
36 | #define BUS_ERROR_OOM SD_BUS_ERROR_MAKE_CONST(SD_BUS_ERROR_NO_MEMORY, "Out of memory") | |
37 | #define BUS_ERROR_FAILED SD_BUS_ERROR_MAKE_CONST(SD_BUS_ERROR_FAILED, "Operation failed") | |
38 | ||
39 | /* | |
40 | * There are two ways to register error maps with the error translation | |
41 | * logic: by using BUS_ERROR_MAP_ELF_REGISTER, which however only | |
42 | * works when linked into the same ELF module, or via | |
43 | * sd_bus_error_add_map() which is the official, external API, that | |
44 | * works from any module. | |
45 | * | |
46 | * Note that BUS_ERROR_MAP_ELF_REGISTER has to be used as decorator in | |
47 | * the bus error table, and BUS_ERROR_MAP_ELF_USE has to be used at | |
48 | * least once per compilation unit (i.e. per library), to ensure that | |
49 | * the error map is really added to the final binary. | |
50 | */ | |
51 | ||
52 | #define BUS_ERROR_MAP_ELF_REGISTER \ | |
53 | __attribute__ ((__section__("BUS_ERROR_MAP"))) \ | |
54 | __attribute__ ((__used__)) \ | |
55 | __attribute__ ((aligned(8))) | |
56 | ||
57 | #define BUS_ERROR_MAP_ELF_USE(errors) \ | |
58 | extern const sd_bus_error_map errors[]; \ | |
1776fff9 | 59 | __attribute__ ((used)) static const sd_bus_error_map * const CONCATENATE(errors ## _copy_, __COUNTER__) = errors; |
5f86c1f4 LP |
60 | |
61 | /* We use something exotic as end marker, to ensure people build the | |
62 | * maps using the macsd-ros. */ | |
63 | #define BUS_ERROR_MAP_END_MARKER -'x' | |
64 | ||
96aad8d1 | 65 | BUS_ERROR_MAP_ELF_USE(bus_standard_errors); |