Skip to content

Commit

Permalink
utils: add lxc_find_next_power2()
Browse files Browse the repository at this point in the history
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
  • Loading branch information
Christian Brauner committed Nov 8, 2017
1 parent d123380 commit ce3f04b
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/lxc/utils.c
Expand Up @@ -2518,3 +2518,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;
}
10 changes: 10 additions & 0 deletions src/lxc/utils.h
Expand Up @@ -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 */

0 comments on commit ce3f04b

Please sign in to comment.