diff options
author | Daniel Mack <github@zonque.org> | 2015-07-30 15:35:52 +0200 |
---|---|---|
committer | Daniel Mack <github@zonque.org> | 2015-07-30 15:35:52 +0200 |
commit | ed070f131f774ff1f08ca36f832e5fe425da03dc (patch) | |
tree | 180ebd517c3cec080e81f25e93beb007e5564a0a | |
parent | 87d0ac43507bb99af04731406af7302cc9652a01 (diff) | |
parent | 89c240e3a5de561ec7164507b41121aecc299b08 (diff) |
Merge pull request #787 from dvdhrm/bus-list
sd-bus: fix parsing of KDBUS_CMD_LIST
-rw-r--r-- | src/bus-proxyd/driver.c | 32 | ||||
-rw-r--r-- | src/libsystemd/sd-bus/bus-control.c | 20 |
2 files changed, 26 insertions, 26 deletions
diff --git a/src/bus-proxyd/driver.c b/src/bus-proxyd/driver.c index 1cb5ea5008..aa94c6f51b 100644 --- a/src/bus-proxyd/driver.c +++ b/src/bus-proxyd/driver.c @@ -441,27 +441,29 @@ int bus_proxy_process_driver(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m, name_list = (struct kdbus_info *) ((uint8_t *) a->kdbus_buffer + cmd.offset); KDBUS_FOREACH(name, name_list, cmd.list_size) { - const char *entry_name = NULL; struct kdbus_item *item; char *n; - KDBUS_ITEM_FOREACH(item, name, items) - if (item->type == KDBUS_ITEM_OWNED_NAME) - entry_name = item->name.name; - - if (!streq_ptr(entry_name, arg0)) - continue; - - if (asprintf(&n, ":1.%llu", (unsigned long long) name->id) < 0) { - err = -ENOMEM; - break; + KDBUS_ITEM_FOREACH(item, name, items) { + if (item->type == KDBUS_ITEM_OWNED_NAME) { + if (!streq_ptr(item->name.name, arg0)) + continue; + + if (asprintf(&n, ":1.%llu", (unsigned long long) name->id) < 0) { + err = -ENOMEM; + break; + } + + r = strv_consume(&owners, n); + if (r < 0) { + err = r; + break; + } + } } - r = strv_consume(&owners, n); - if (r < 0) { - err = r; + if (err < 0) break; - } } r = bus_kernel_cmd_free(a, cmd.offset); diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c index c53666ddd0..773c264cf0 100644 --- a/src/libsystemd/sd-bus/bus-control.c +++ b/src/libsystemd/sd-bus/bus-control.c @@ -256,9 +256,7 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) { name_list = (struct kdbus_info *) ((uint8_t *) bus->kdbus_buffer + cmd.offset); KDBUS_FOREACH(name, name_list, cmd.list_size) { - struct kdbus_item *item; - const char *entry_name = NULL; if ((flags & KDBUS_LIST_UNIQUE) && name->id != previous_id) { char *n; @@ -275,15 +273,15 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) { previous_id = name->id; } - KDBUS_ITEM_FOREACH(item, name, items) - if (item->type == KDBUS_ITEM_OWNED_NAME) - entry_name = item->name.name; - - if (entry_name && service_name_is_valid(entry_name)) { - r = strv_extend(x, entry_name); - if (r < 0) { - r = -ENOMEM; - goto fail; + KDBUS_ITEM_FOREACH(item, name, items) { + if (item->type == KDBUS_ITEM_OWNED_NAME) { + if (service_name_is_valid(item->name.name)) { + r = strv_extend(x, item->name.name); + if (r < 0) { + r = -ENOMEM; + goto fail; + } + } } } } |