X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-bus%2Fbus-kernel.c;h=3aa408414ee3f79029d5e090e4f17bb4d2021b91;hb=9b29bb6853987bf6fef21531f69864fdfb39eb9a;hp=b11df300b6020781f190884b18d44d613c257299;hpb=bc7fd8cdbef54ebd3902cdd455ecad3e095f7450;p=elogind.git diff --git a/src/libsystemd-bus/bus-kernel.c b/src/libsystemd-bus/bus-kernel.c index b11df300b..3aa408414 100644 --- a/src/libsystemd-bus/bus-kernel.c +++ b/src/libsystemd-bus/bus-kernel.c @@ -184,12 +184,13 @@ static int bus_message_setup_bloom(sd_bus_message *m, void *bloom) { } static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) { + struct bus_body_part *part; struct kdbus_item *d; bool well_known; uint64_t unique; size_t sz, dl; + unsigned i; int r; - struct bus_body_part *part; assert(b); assert(m); @@ -253,7 +254,7 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) { if (m->fields) append_payload_vec(&d, m->fields, ALIGN8(m->header->fields_size)); - for (part = &m->body; part && part->size > 0; part = part->next) + MESSAGE_FOREACH_PART(part, i, m) append_payload_vec(&d, part->data, part->size); if (m->kdbus->dst_id == KDBUS_DST_ID_BROADCAST) { @@ -441,7 +442,7 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess if (d->vec.size < sizeof(struct bus_header)) return -EBADMSG; - h = (struct bus_header*)UINT64_TO_PTR(d->vec.address); + h = UINT64_TO_PTR(d->vec.address); } n_payload++; @@ -476,9 +477,6 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess if (n_bytes != total) return -EBADMSG; - //if (n_payload > 2) - // return -EBADMSG; - r = bus_message_from_header(h, sizeof(struct bus_header), fds, n_fds, NULL, seclabel, 0, &m); if (r < 0) return r; @@ -553,7 +551,7 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess log_debug("Got unknown field from kernel %llu", d->type); } - if ((BUS_MESSAGE_FIELDS_SIZE(m) > 0 && !m->fields) || BUS_MESSAGE_SIZE(m) != idx) { + if ((BUS_MESSAGE_FIELDS_SIZE(m) > 0 && !m->fields)) { sd_bus_message_unref(m); return -EBADMSG; } @@ -685,10 +683,10 @@ int bus_kernel_pop_memfd(sd_bus *bus, void **address, size_t *size) { return -ENOTSUP; if (bus->n_memfd_cache <= 0) { - int fd; + int fd, r; - fd = ioctl(bus->input_fd, KDBUS_CMD_MEMFD_NEW, &fd); - if (fd < 0) + r = ioctl(bus->input_fd, KDBUS_CMD_MEMFD_NEW, &fd); + if (r < 0) return -errno; *address = NULL;