chiark / gitweb /
bus: add macro for iterating through body parts of a message
[elogind.git] / src / libsystemd-bus / bus-kernel.c
index b11df300b6020781f190884b18d44d613c257299..3aa408414ee3f79029d5e090e4f17bb4d2021b91 100644 (file)
@@ -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;