return -EEXIST;
else if (ret == BUS_NAME_IN_QUEUE)
return 0;
- else
- return -EIO;
+ else if (ret == BUS_NAME_PRIMARY_OWNER)
+ return 1;
- return 1;
+ return -EIO;
}
_public_ int sd_bus_request_name(sd_bus *bus, const char *name, unsigned flags) {
/* 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);
name_list = (struct kdbus_name_list *) ((uint8_t *) bus->kdbus_buffer + cmd.offset);
- KDBUS_PART_FOREACH(name, name_list, names) {
+ KDBUS_ITEM_FOREACH(name, name_list, names) {
if (name->size > sizeof(*name)) {
r = strv_extend(x, name->name);
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);
c->mask |= SD_BUS_CREDS_UNIQUE_NAME;
}
- KDBUS_PART_FOREACH(item, conn_info, items) {
+ KDBUS_ITEM_FOREACH(item, conn_info, items) {
switch (item->type) {
case KDBUS_ITEM_CMDLINE:
if (mask & SD_BUS_CREDS_CMDLINE) {
- c->cmdline_size = item->size - KDBUS_PART_HEADER_SIZE;
+ c->cmdline_size = item->size - KDBUS_ITEM_HEADER_SIZE;
c->cmdline = memdup(item->data, c->cmdline_size);
if (!c->cmdline) {
r = -ENOMEM;
SD_BUS_CREDS_INHERITABLE_CAPS | SD_BUS_CREDS_BOUNDING_CAPS) & mask;
if (m) {
- c->capability_size = item->size - KDBUS_PART_HEADER_SIZE;
+ c->capability_size = item->size - KDBUS_ITEM_HEADER_SIZE;
c->capability = memdup(item->data, c->capability_size);
if (!c->capability) {
r = -ENOMEM;
}
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;
}
item->type = KDBUS_MATCH_BLOOM;
memcpy(item->data64, bloom, BLOOM_SIZE);
- item = KDBUS_PART_NEXT(item);
+ item = KDBUS_ITEM_NEXT(item);
}
if (sender) {