chiark / gitweb /
bus: switch to multiple KDBUS_ITEM_NAME including the flags
[elogind.git] / src / libsystemd-bus / bus-control.c
index 7a772ff49f87d3f55eca6fde817a772a96a14f80..186724e8ad1f7723ef48cb5986028eb3bba89312 100644 (file)
@@ -208,7 +208,6 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) {
 
         /* Caller will free half-constructed list on failure... */
 
-        cmd.size = sizeof(struct kdbus_cmd_name_list);
         cmd.flags = flags;
 
         r = ioctl(bus->input_fd, KDBUS_CMD_NAME_LIST, &cmd);
@@ -364,6 +363,7 @@ static int bus_get_owner_kdbus(
                 cmd = alloca0(size);
                 strcpy(cmd->name, name);
         }
+        cmd->flags = KDBUS_ATTACH_NAMES;
 
         cmd->size = size;
         r = ioctl(bus->input_fd, KDBUS_CMD_CONN_INFO, cmd);
@@ -504,14 +504,11 @@ static int bus_get_owner_kdbus(
                         }
                         break;
 
-                case KDBUS_ITEM_NAMES:
+                case KDBUS_ITEM_NAME:
                         if (mask & SD_BUS_CREDS_WELL_KNOWN_NAMES) {
-                                c->well_known_names_size = item->size - KDBUS_PART_HEADER_SIZE;
-                                c->well_known_names = memdup(item->data, c->well_known_names_size);
-                                if (!c->well_known_names) {
-                                        r = -ENOMEM;
+                                r = strv_extend(&c->well_known_names, item->name.name);
+                                if (r < 0)
                                         goto fail;
-                                }
 
                                 c->mask |= SD_BUS_CREDS_WELL_KNOWN_NAMES;
                         }