aboutsummaryrefslogtreecommitdiff
path: root/include/apos/utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/apos/utils.h')
-rw-r--r--include/apos/utils.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/include/apos/utils.h b/include/apos/utils.h
index 39d5b83..881cd8f 100644
--- a/include/apos/utils.h
+++ b/include/apos/utils.h
@@ -14,10 +14,24 @@
#define GLUE2(x, y) x##y
#define GLUE(x, y) GLUE2(x, y)
+#include <apos/builtin.h>
+
+#if __has_builtin(__builtin_offsetof)
+#define offsetof(type, member) __builtin_offsetof(type, member)
+#else
+#define offsetof(type, member) ((size_t)&((type *)0)->member)
+#endif
+
+#define container_of(ptr, type, member) \
+ ((type *)((char *)(ptr) - offsetof(type, member)))
+
#include <apos/types.h>
static inline size_t align_up(size_t val, size_t a)
{
+ if(!a)
+ return val;
+
size_t rem = val % a;
if (rem == 0)
@@ -28,6 +42,9 @@ static inline size_t align_up(size_t val, size_t a)
static inline size_t align_down(size_t val, size_t a)
{
+ if(!a)
+ return val;
+
return val - (val % a);
}