summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorMichal Schmidt <mschmidt@redhat.com>2014-10-15 01:28:54 +0200
committerMichal Schmidt <mschmidt@redhat.com>2014-10-30 19:50:50 +0100
commitb5de6d984296c9446ba0d2d32fd3248f453208aa (patch)
treecc8c664f917009d8339cad6adab6e4e21aea3420 /src/shared
parenta09abc4ae0bdc0200324eaa0416f23ff2170ec4e (diff)
util: add log2u(), log2u_round_up()
Two's logarithms for unsigned.
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/util.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/shared/util.h b/src/shared/util.h
index aad9eb7fcb..e405b02a81 100644
--- a/src/shared/util.h
+++ b/src/shared/util.h
@@ -830,6 +830,21 @@ static inline int log2i(int x) {
return __SIZEOF_INT__ * 8 - __builtin_clz(x) - 1;
}
+static inline unsigned log2u(unsigned x) {
+ assert(x > 0);
+
+ return sizeof(unsigned) * 8 - __builtin_clz(x) - 1;
+}
+
+static inline unsigned log2u_round_up(unsigned x) {
+ assert(x > 0);
+
+ if (x == 1)
+ return 0;
+
+ return log2u(x - 1) + 1;
+}
+
static inline bool logind_running(void) {
return access("/run/systemd/seats/", F_OK) >= 0;
}