chiark / gitweb /
libsystemd-bus: kernel: add sd_bus_kernel_translate_request_name_flags
authorDaniel Mack <zonque@gmail.com>
Tue, 26 Nov 2013 15:45:50 +0000 (16:45 +0100)
committerDaniel Mack <zonque@gmail.com>
Fri, 29 Nov 2013 13:06:50 +0000 (14:06 +0100)
Flags used to request a name from kdbus are not identical to what DBus
and sd_bus use internally. Introduce a simple function to do the
translation for us. It's factored out to a separate function so the
dbus-driver instance can make use of it as well.

src/libsystemd-bus/bus-kernel.c
src/libsystemd-bus/bus-kernel.h

index 9d4b6cf72100e58733f1a23a34d72f47f3557d3b..08f1851b96ea9aeabcef78e55326e481a42d9410 100644 (file)
@@ -806,3 +806,21 @@ void bus_kernel_flush_memfd(sd_bus *b) {
         for (i = 0; i < b->n_memfd_cache; i++)
                 close_and_munmap(b->memfd_cache[i].fd, b->memfd_cache[i].address, b->memfd_cache[i].size);
 }
+
+int sd_bus_kernel_translate_request_name_flags(uint64_t sd_bus_flags, uint64_t *kdbus_flags) {
+
+        assert_return(kdbus_flags != NULL, -EINVAL);
+
+        *kdbus_flags = 0;
+
+        if (sd_bus_flags & SD_BUS_NAME_ALLOW_REPLACEMENT)
+                *kdbus_flags |= KDBUS_NAME_ALLOW_REPLACEMENT;
+
+        if (sd_bus_flags & SD_BUS_NAME_REPLACE_EXISTING)
+                *kdbus_flags |= KDBUS_NAME_REPLACE_EXISTING;
+
+        if (!(sd_bus_flags & SD_BUS_NAME_DO_NOT_QUEUE))
+                *kdbus_flags |= KDBUS_NAME_QUEUE;
+
+        return 0;
+}
index 69df4f4e9e4b910027e733e054a396b608173cc9..779a7de2eb012a4a9f0c63d23e72d78e6deaf9aa 100644 (file)
@@ -68,3 +68,5 @@ void bus_kernel_push_memfd(sd_bus *bus, int fd, void *address, size_t size);
 void bus_kernel_flush_memfd(sd_bus *bus);
 
 int bus_kernel_parse_unique_name(const char *s, uint64_t *id);
+
+int sd_bus_kernel_translate_request_name_flags(uint64_t sd_bus_flags, uint64_t *kdbus_flags);