]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
cgfsng: lxc_cpumask_to_cpulist()
authorChristian Brauner <christian.brauner@ubuntu.com>
Sat, 17 Feb 2018 17:54:10 +0000 (18:54 +0100)
committerChristian Brauner <christian.brauner@ubuntu.com>
Sat, 17 Feb 2018 17:54:10 +0000 (18:54 +0100)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/cgroups/cgfsng.c

index feeb6541cc88e8c776224bc0cfb16a23380d08ea..9ca42e50b0f8b0c6cc6cb337cf71af764aa77c58 100644 (file)
@@ -448,24 +448,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);
 }