X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd%2Fsd-bus%2Fbus-error.c;h=47f90c26f8f466ed8c486025bf9609c6598c93c7;hb=fed1e721fd0c81e60c77120539f34e16c2585634;hp=2e64b925f3d5dbf5c96b8713ae2966b8d636f710;hpb=4a0a74179fcfb85c456794fd91fa2ae5d4d3bc8f;p=elogind.git diff --git a/src/libsystemd/sd-bus/bus-error.c b/src/libsystemd/sd-bus/bus-error.c index 2e64b925f..47f90c26f 100644 --- a/src/libsystemd/sd-bus/bus-error.c +++ b/src/libsystemd/sd-bus/bus-error.c @@ -35,7 +35,7 @@ #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}, @@ -80,7 +80,7 @@ static int bus_error_mapping_lookup(const char *name, size_t len) { 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; @@ -444,6 +444,7 @@ _public_ int sd_bus_error_set_errno(sd_bus_error *e, int error) { } int bus_error_set_errnofv(sd_bus_error *e, int error, const char *format, va_list ap) { + PROTECT_ERRNO; int r; if (error < 0) @@ -477,8 +478,9 @@ int bus_error_set_errnofv(sd_bus_error *e, int error, const char *format, va_lis 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) {