chiark / gitweb /
bus: catch up with kernel changes
[elogind.git] / src / libsystemd-bus / bus-kernel.c
index 2bb1b9a19a70993ebbcedf7891cd89f7e0d02f17..5172b321139ba9bcf963b1ece2f3eebe48f22998 100644 (file)
@@ -540,6 +540,7 @@ int bus_kernel_read_message(sd_bus *bus, sd_bus_message **m) {
 
 int bus_kernel_create(const char *name, char **s) {
         struct kdbus_cmd_bus_make *make;
+        struct kdbus_cmd_make_item *n, *cg;
         size_t l;
         int fd;
         char *p;
@@ -552,16 +553,27 @@ int bus_kernel_create(const char *name, char **s) {
                 return -errno;
 
         l = strlen(name);
-        make = alloca0(offsetof(struct kdbus_cmd_bus_make, name) + DECIMAL_STR_MAX(uid_t) + 1 + l + 1);
-        sprintf(make->name, "%lu-%s", (unsigned long) getuid(), name);
-        make->size = offsetof(struct kdbus_cmd_bus_make, name) + strlen(make->name) + 1;
+        make = alloca0(offsetof(struct kdbus_cmd_bus_make, items) +
+                       sizeof(struct kdbus_cmd_make_item) + sizeof(uint64_t) +
+                       sizeof(struct kdbus_cmd_make_item) + DECIMAL_STR_MAX(uid_t) + 1 + l + 1);
+
+        cg = make->items;
+        cg->type = KDBUS_CMD_MAKE_CGROUP;
+        cg->data64[0] = 1;
+        cg->size = sizeof(struct kdbus_cmd_make_item) + sizeof(uint64_t);
+
+        n = KDBUS_ITEM_NEXT(cg);
+        n->type = KDBUS_CMD_MAKE_NAME;
+        sprintf(n->str, "%lu-%s", (unsigned long) getuid(), name);
+        n->size = sizeof(struct kdbus_cmd_make_item) + strlen(n->str) + 1;
+
+        make->size = offsetof(struct kdbus_cmd_bus_make, items) + cg->size + n->size;
         make->flags = KDBUS_ACCESS_WORLD | KDBUS_POLICY_OPEN;
         make->bus_flags = 0;
         make->bloom_size = BLOOM_SIZE;
-        make->cgroup_id = 1;
         assert_cc(BLOOM_SIZE % 8 == 0);
 
-        p = strjoin("/dev/kdbus/", make->name, "/bus", NULL);
+        p = strjoin("/dev/kdbus/", n->str, "/bus", NULL);
         if (!p)
                 return -ENOMEM;