From e12d81ae80214ef05ddedafd016bdd604ce17d12 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 26 Nov 2014 14:59:12 +0100 Subject: sd-bus: given that the kernel now passes the auxgroups list as 32bit array to us, no need to convert to uid_t manually This way, we can save one allocation and avoid copying the array unnecesarily. --- src/libsystemd/sd-bus/bus-control.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'src/libsystemd/sd-bus/bus-control.c') diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c index 9cd5cd5fb6..758715d74e 100644 --- a/src/libsystemd/sd-bus/bus-control.c +++ b/src/libsystemd/sd-bus/bus-control.c @@ -402,6 +402,10 @@ static int bus_populate_creds_from_items( uint64_t m; int r; + assert(bus); + assert(info); + assert(c); + KDBUS_ITEM_FOREACH(item, info, items) { switch (item->type) { @@ -590,18 +594,18 @@ static int bus_populate_creds_from_items( case KDBUS_ITEM_AUXGROUPS: if (mask & SD_BUS_CREDS_SUPPLEMENTARY_GIDS) { - size_t i, n; - uid_t *u; + size_t n; + uid_t *g; - n = (item->size - offsetof(struct kdbus_item, data64)) / sizeof(uint64_t); - u = new(uid_t, n); - if (!u) - return -ENOMEM; + assert_cc(sizeof(gid_t) == sizeof(uint32_t)); - for (i = 0; i < n; i++) - u[i] = (uid_t) item->data64[i]; + n = (item->size - offsetof(struct kdbus_item, data32)) / sizeof(uint32_t); + g = newdup(gid_t, item->data32, n); + if (!g) + return -ENOMEM; - c->supplementary_gids = u; + free(c->supplementary_gids); + c->supplementary_gids = g; c->n_supplementary_gids = n; c->mask |= SD_BUS_CREDS_SUPPLEMENTARY_GIDS; -- cgit v1.2.3-54-g00ecf