X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-bus%2Fbus-kernel.c;h=cf5f7ee198da7c7b3d63829c2f0072149a0a5f1a;hb=b1454bf05cecb22e3009db204bf17ec72537c539;hp=f36f60e496edfe03df8cfa1de18aacbf9c4a7431;hpb=a56f19c4f9c8ed5f916d7edbe1f73b7b49e68e83;p=elogind.git diff --git a/src/libsystemd-bus/bus-kernel.c b/src/libsystemd-bus/bus-kernel.c index f36f60e49..cf5f7ee19 100644 --- a/src/libsystemd-bus/bus-kernel.c +++ b/src/libsystemd-bus/bus-kernel.c @@ -32,10 +32,10 @@ #include "bus-kernel.h" #include "bus-bloom.h" -#define KDBUS_MSG_FOREACH_DATA(d, k) \ - for ((d) = (k)->data; \ +#define KDBUS_FOREACH_ITEM(i, k) \ + for ((i) = (k)->items; \ (uint8_t*) (d) < (uint8_t*) (k) + (k)->size; \ - (d) = (struct kdbus_msg_data*) ((uint8_t*) (d) + ALIGN8((d)->size))) + (i) = (struct kdbus_msg_data*) ((uint8_t*) (i) + ALIGN8((i)->size))) static int parse_unique_name(const char *s, uint64_t *id) { int r; @@ -183,7 +183,7 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) { } else well_known = false; - sz = offsetof(struct kdbus_msg, data); + sz = offsetof(struct kdbus_msg, items); /* Add in fixed header, fields header and payload */ sz += 3 * ALIGN8(offsetof(struct kdbus_msg_data, vec) + sizeof(struct kdbus_vec)); @@ -214,7 +214,7 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) { m->kdbus->timeout_ns = m->timeout * NSEC_PER_USEC; - d = m->kdbus->data; + d = m->kdbus->items; if (well_known) append_destination(&d, m->destination, dl); @@ -333,7 +333,7 @@ int bus_kernel_write_message(sd_bus *bus, sd_bus_message *m) { static void close_kdbus_msg(struct kdbus_msg *k) { struct kdbus_msg_data *d; - KDBUS_MSG_FOREACH_DATA(d, k) { + KDBUS_FOREACH_ITEM(d, k) { if (d->type != KDBUS_MSG_UNIX_FDS) continue; @@ -359,7 +359,7 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess if (k->payload_type != KDBUS_PAYLOAD_DBUS1) return 0; - KDBUS_MSG_FOREACH_DATA(d, k) { + KDBUS_FOREACH_ITEM(d, k) { size_t l; l = d->size - offsetof(struct kdbus_msg_data, data); @@ -409,7 +409,7 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess if (r < 0) return r; - KDBUS_MSG_FOREACH_DATA(d, k) { + KDBUS_FOREACH_ITEM(d, k) { size_t l; l = d->size - offsetof(struct kdbus_msg_data, data); @@ -447,7 +447,9 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k, sd_bus_mess else if (d->type == KDBUS_MSG_SRC_CMDLINE) { m->cmdline = d->str; m->cmdline_length = l; - } else + } else if (d->type == KDBUS_MSG_SRC_CGROUP) + m->cgroup = d->str; + else log_debug("Got unknown field from kernel %llu", d->type); } @@ -553,7 +555,7 @@ int bus_kernel_create(const char *name, char **s) { 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);