#define BUS_ERROR_OOM SD_BUS_ERROR_MAKE_CONST(SD_BUS_ERROR_NO_MEMORY, "Out of memory")
#define BUS_ERROR_FAILED SD_BUS_ERROR_MAKE_CONST(SD_BUS_ERROR_FAILED, "Operation failed")
-SD_BUS_ERROR_MAPPING = {
+SD_BUS_ERROR_MAPPING(sd_bus_standard) = {
{"org.freedesktop.DBus.Error.Failed", EACCES},
{"org.freedesktop.DBus.Error.NoMemory", ENOMEM},
{"org.freedesktop.DBus.Error.ServiceUnknown", EHOSTUNREACH},
const sd_bus_name_error_mapping *m;
for (m = __start_sd_bus_errnomap; m < __stop_sd_bus_errnomap; m++)
- if (strneq(m->name, name, len))
+ if (m->name && strneq(m->name, name, len))
return m->code;
return EIO;
}
int bus_error_set_errnofv(sd_bus_error *e, int error, const char *format, va_list ap) {
+ PROTECT_ERRNO;
int r;
if (error < 0)
if (format) {
char *m;
- /* First, let's try to fill in the supplied message */
+ /* Then, let's try to fill in the supplied message */
+ errno = error; /* Make sure that %m resolves to the specified error */
r = vasprintf(&m, format, ap);
if (r >= 0) {