summaryrefslogtreecommitdiff
path: root/src/libsystemd-bus/bus-control.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libsystemd-bus/bus-control.c')
-rw-r--r--src/libsystemd-bus/bus-control.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/libsystemd-bus/bus-control.c b/src/libsystemd-bus/bus-control.c
index eeeb77b591..b222175148 100644
--- a/src/libsystemd-bus/bus-control.c
+++ b/src/libsystemd-bus/bus-control.c
@@ -84,10 +84,20 @@ _public_ int sd_bus_request_name(sd_bus *bus, const char *name, int flags) {
#endif
r = ioctl(bus->input_fd, KDBUS_CMD_NAME_ACQUIRE, n);
- if (r < 0)
+ if (r < 0) {
+ if (errno == -EALREADY)
+ return SD_BUS_NAME_ALREADY_OWNER;
+
+ if (errno == -EEXIST)
+ return SD_BUS_NAME_EXISTS;
+
return -errno;
+ }
- return n->flags;
+ if (n->flags & KDBUS_NAME_IN_QUEUE)
+ return SD_BUS_NAME_IN_QUEUE;
+
+ return SD_BUS_NAME_PRIMARY_OWNER;
} else {
r = sd_bus_call_method(
bus,