[systemd-commits] src/libsystemd-bus
Lennart Poettering
lennart at kemper.freedesktop.org
Mon Dec 23 13:33:39 PST 2013
src/libsystemd-bus/bus-control.c | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
New commits:
commit 85feb8e4d9b0ef65c338e1a1a16665d0cb8d544a
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Dec 23 22:32:33 2013 +0100
bus: don't attach KDBUS_ITEM_ID to match ioctl() if we don't need it
diff --git a/src/libsystemd-bus/bus-control.c b/src/libsystemd-bus/bus-control.c
index 942bc01..1eed7b9 100644
--- a/src/libsystemd-bus/bus-control.c
+++ b/src/libsystemd-bus/bus-control.c
@@ -907,8 +907,7 @@ int bus_add_match_internal_kernel(
zero(bloom);
- sz = ALIGN8(offsetof(struct kdbus_cmd_match, items) +
- offsetof(struct kdbus_item, id) + sizeof(uint64_t));
+ sz = ALIGN8(offsetof(struct kdbus_cmd_match, items));
for (i = 0; i < n_components; i++) {
struct bus_match_component *c = &components[i];
@@ -922,8 +921,9 @@ int bus_add_match_internal_kernel(
r = bus_kernel_parse_unique_name(c->value_str, &src_id);
if (r < 0)
return r;
-
- if (r == 0) {
+ else if (r > 0)
+ sz += ALIGN8(offsetof(struct kdbus_item, id) + sizeof(uint64_t));
+ else {
sender = c->value_str;
sender_length = strlen(sender);
sz += ALIGN8(offsetof(struct kdbus_item, str) + sender_length + 1);
@@ -1026,19 +1026,22 @@ int bus_add_match_internal_kernel(
m->owner_id = id;
item = m->items;
- item->size = offsetof(struct kdbus_item, id) + sizeof(uint64_t);
- item->type = KDBUS_ITEM_ID;
- item->id = src_id;
- if (using_bloom) {
+ if (src_id != KDBUS_MATCH_ID_ANY) {
+ item->size = offsetof(struct kdbus_item, id) + sizeof(uint64_t);
+ item->type = KDBUS_ITEM_ID;
+ item->id = src_id;
item = KDBUS_ITEM_NEXT(item);
+ }
+
+ if (using_bloom) {
item->size = offsetof(struct kdbus_item, data64) + BLOOM_SIZE;
item->type = KDBUS_ITEM_BLOOM;
memcpy(item->data64, bloom, BLOOM_SIZE);
+ item = KDBUS_ITEM_NEXT(item);
}
if (sender) {
- item = KDBUS_ITEM_NEXT(item);
item->size = offsetof(struct kdbus_item, str) + sender_length + 1;
item->type = KDBUS_ITEM_NAME;
memcpy(item->str, sender, sender_length + 1);
More information about the systemd-commits
mailing list