X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibelogind%2Fsd-bus%2Fbus-internal.c;h=14d590a80cf286d09e248cbe634efe81faeb547d;hb=ec82d020534270d1979da2d0b27f84e1846b2851;hp=37793e48edb03a5dbdad94028a2d45343700f25b;hpb=19a26b687fef2c7efce49a1aefd376427a14ab41;p=elogind.git diff --git a/src/libelogind/sd-bus/bus-internal.c b/src/libelogind/sd-bus/bus-internal.c index 37793e48e..14d590a80 100644 --- a/src/libelogind/sd-bus/bus-internal.c +++ b/src/libelogind/sd-bus/bus-internal.c @@ -1,5 +1,3 @@ -/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ - /*** This file is part of systemd. @@ -19,7 +17,11 @@ along with systemd; If not, see . ***/ +#include "alloc-util.h" #include "bus-internal.h" +#include "bus-message.h" +#include "hexdecoct.h" +#include "string-util.h" bool object_path_is_valid(const char *p) { const char *q; @@ -166,6 +168,7 @@ bool service_name_is_valid(const char *p) { return true; } +#if 0 /// UNNEEDED by elogind char* service_name_startswith(const char *a, const char *b) { const char *p; @@ -185,6 +188,7 @@ char* service_name_startswith(const char *a, const char *b) { return NULL; } +#endif // 0 bool member_name_is_valid(const char *p) { const char *q; @@ -345,3 +349,28 @@ char *bus_address_escape(const char *v) { *b = 0; return r; } + +int bus_maybe_reply_error(sd_bus_message *m, int r, sd_bus_error *error) { + assert(m); + + if (r < 0) { + if (m->header->type == SD_BUS_MESSAGE_METHOD_CALL) + sd_bus_reply_method_errno(m, r, error); + + } else if (sd_bus_error_is_set(error)) { + if (m->header->type == SD_BUS_MESSAGE_METHOD_CALL) + sd_bus_reply_method_error(m, error); + } else + return r; + + log_debug("Failed to process message [type=%s sender=%s path=%s interface=%s member=%s signature=%s]: %s", + bus_message_type_to_string(m->header->type), + strna(m->sender), + strna(m->path), + strna(m->interface), + strna(m->member), + strna(m->root_container.signature), + bus_error_message(error, r)); + + return 1; +}