]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
utils: add lxc_find_next_power2()
authorChristian Brauner <christian.brauner@ubuntu.com>
Wed, 18 Oct 2017 19:20:37 +0000 (21:20 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Sat, 21 Oct 2017 16:38:13 +0000 (18:38 +0200)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/utils.c
src/lxc/utils.h

index 7c60a4451cd593a2645e95a0c90155b5ac546d08..19e6c2ee6ef923228e5b22b5ba030519807cce6c 100644 (file)
@@ -2457,3 +2457,21 @@ int parse_byte_size_string(const char *s, int64_t *converted)
        *converted = overflow;
        return 0;
 }
+
+uint64_t lxc_find_next_power2(uint64_t n)
+{
+       /* 0 is not valid input. We return 0 to the caller since 0 is not a
+        * valid power of two.
+        */
+       if (n == 0)
+               return 0;
+
+       if (!(n & (n - 1)))
+               return n;
+
+       while (n & (n - 1))
+               n = n & (n - 1);
+
+       n = n << 1;
+       return n;
+}
index fa9f88cc22e007245543cda1b79bab7b3b1689f1..7ef3056a56eae9faeb8b8a15cd16585c86e4838a 100644 (file)
@@ -472,4 +472,14 @@ extern bool lxc_nic_exists(char *nic);
 extern int lxc_make_tmpfile(char *template, bool rm);
 extern uint64_t lxc_getpagesize(void);
 
+/* If n is not a power of 2 this function will return the next power of 2
+ * greater than that number. Note that this function always returns the *next*
+ * power of 2 *greater* that number not the *nearest*. For example, passing 1025
+ * as argument this function will return 2048 although the closest power of 2
+ * would be 1024.
+ * If the caller passes in 0 they will receive 0 in return since this is invalid
+ * input and 0 is not a power of 2.
+ */
+extern uint64_t lxc_find_next_power2(uint64_t n);
+
 #endif /* __LXC_UTILS_H */