From: Christian Brauner Date: Sat, 17 Feb 2018 17:54:10 +0000 (+0100) Subject: cgfsng: lxc_cpumask_to_cpulist() X-Git-Tag: lxc-2.0.10~309 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6afe522b95debdbf550ad8c4827699e8cce5c55b;p=thirdparty%2Flxc.git cgfsng: lxc_cpumask_to_cpulist() Signed-off-by: Christian Brauner --- diff --git a/src/lxc/cgroups/cgfsng.c b/src/lxc/cgroups/cgfsng.c index f969c03ff..58749b78a 100644 --- a/src/lxc/cgroups/cgfsng.c +++ b/src/lxc/cgroups/cgfsng.c @@ -439,24 +439,31 @@ static uint32_t *lxc_cpumask(char *buf, size_t nbits) /* Turn cpumask into simple, comma-separated cpulist. */ static char *lxc_cpumask_to_cpulist(uint32_t *bitarr, size_t nbits) { - size_t i; int ret; - char numstr[LXC_NUMSTRLEN64] = {0}; + size_t i; char **cpulist = NULL; + char numstr[LXC_NUMSTRLEN64] = {0}; for (i = 0; i <= nbits; i++) { - if (is_set(i, bitarr)) { - ret = snprintf(numstr, LXC_NUMSTRLEN64, "%zu", i); - if (ret < 0 || (size_t)ret >= LXC_NUMSTRLEN64) { - lxc_free_array((void **)cpulist, free); - return NULL; - } - if (lxc_append_string(&cpulist, numstr) < 0) { - lxc_free_array((void **)cpulist, free); - return NULL; - } + if (!is_set(i, bitarr)) + continue; + + ret = snprintf(numstr, LXC_NUMSTRLEN64, "%zu", i); + if (ret < 0 || (size_t)ret >= LXC_NUMSTRLEN64) { + lxc_free_array((void **)cpulist, free); + return NULL; + } + + ret = lxc_append_string(&cpulist, numstr); + if (ret < 0) { + lxc_free_array((void **)cpulist, free); + return NULL; } } + + if (!cpulist) + return NULL; + return lxc_string_join(",", (const char **)cpulist, false); }