X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;ds=sidebyside;f=src%2Flibelogind%2Fsd-bus%2Fbus-kernel.c;h=25fc4ba80e9e72b9854ff95a62545ff5d7cb0d63;hb=059696ac014da265ee2d1b062cd0dc7bee3d2001;hp=6ac5ebc3daef321626c418a13afb532e67270e7f;hpb=f95b4196af441a62980cc2ec1e72993e2a2521b6;p=elogind.git diff --git a/src/libelogind/sd-bus/bus-kernel.c b/src/libelogind/sd-bus/bus-kernel.c index 6ac5ebc3d..25fc4ba80 100644 --- a/src/libelogind/sd-bus/bus-kernel.c +++ b/src/libelogind/sd-bus/bus-kernel.c @@ -168,6 +168,27 @@ static void add_bloom_arg(void *data, size_t size, unsigned n_hash, unsigned i, bloom_add_prefixes(data, size, n_hash, buf, t, '/'); } +static void add_bloom_arg_has(void *data, size_t size, unsigned n_hash, unsigned i, const char *t) { + char buf[sizeof("arg")-1 + 2 + sizeof("-has")]; + char *e; + + assert(data); + assert(size > 0); + assert(i < 64); + assert(t); + + e = stpcpy(buf, "arg"); + if (i < 10) + *(e++) = '0' + (char) i; + else { + *(e++) = '0' + (char) (i / 10); + *(e++) = '0' + (char) (i % 10); + } + + strcpy(e, "-has"); + bloom_add_pair(data, size, n_hash, buf, t); +} + static int bus_message_setup_bloom(sd_bus_message *m, struct kdbus_bloom_filter *bloom) { void *data; unsigned i; @@ -212,7 +233,9 @@ static int bus_message_setup_bloom(sd_bus_message *m, struct kdbus_bloom_filter return r; add_bloom_arg(data, m->bus->bloom_size, m->bus->bloom_n_hash, i, t); - } if (type == SD_BUS_TYPE_ARRAY && STR_IN_SET(contents, "s", "o", "g")) { + } + + if (type == SD_BUS_TYPE_ARRAY && STR_IN_SET(contents, "s", "o", "g")) { /* As well as array of simple strings of any kinds */ r = sd_bus_message_enter_container(m, type, contents); @@ -220,7 +243,7 @@ static int bus_message_setup_bloom(sd_bus_message *m, struct kdbus_bloom_filter return r; while ((r = sd_bus_message_read_basic(m, contents[0], &t)) > 0) - add_bloom_arg(data, m->bus->bloom_size, m->bus->bloom_n_hash, i, t); + add_bloom_arg_has(data, m->bus->bloom_size, m->bus->bloom_n_hash, i, t); if (r < 0) return r; @@ -774,6 +797,7 @@ static int bus_kernel_make_message(sd_bus *bus, struct kdbus_msg *k) { case KDBUS_ITEM_FDS: case KDBUS_ITEM_SECLABEL: + case KDBUS_ITEM_BLOOM_FILTER: break; default: @@ -1556,6 +1580,8 @@ uint64_t attach_flags_to_kdbus(uint64_t mask) { return m; } +/// UNNEEDED by elogind +#if 0 int bus_kernel_create_bus(const char *name, bool world, char **s) { struct kdbus_cmd *make; struct kdbus_item *n; @@ -1631,6 +1657,7 @@ int bus_kernel_create_bus(const char *name, bool world, char **s) { return fd; } +#endif // 0 int bus_kernel_open_bus_fd(const char *bus, char **path) { char *p; @@ -1664,6 +1691,8 @@ int bus_kernel_open_bus_fd(const char *bus, char **path) { return fd; } +/// UNNEEDED by elogind +#if 0 int bus_kernel_create_endpoint(const char *bus_name, const char *ep_name, char **ep_path) { _cleanup_free_ char *path = NULL; struct kdbus_cmd *make; @@ -1707,6 +1736,7 @@ int bus_kernel_create_endpoint(const char *bus_name, const char *ep_name, char * return fd; } +#endif // 0 int bus_kernel_try_close(sd_bus *bus) { struct kdbus_cmd byebye = { .size = sizeof(byebye) }; @@ -1720,6 +1750,8 @@ int bus_kernel_try_close(sd_bus *bus) { return 0; } +/// UNNEEDED by elogind +#if 0 int bus_kernel_drop_one(int fd) { struct kdbus_cmd_recv recv = { .size = sizeof(recv), @@ -1733,6 +1765,7 @@ int bus_kernel_drop_one(int fd) { return 0; } +#endif // 0 int bus_kernel_realize_attach_flags(sd_bus *bus) { struct kdbus_cmd *update;