align.h: Implement ALIGN_FLOOR macro
[lttng-tools.git] / src / common / align.h
index fe3267354aad3980a4ba55e28b35cd99bfb1b5b3..c8d9d51766906e15cfe444258778872e0a5ad143 100644 (file)
 #include <unistd.h>
 #include <limits.h>
 
-#ifndef PAGE_SIZE      /* Cygwin limits.h defines its own PAGE_SIZE */
+#ifndef PAGE_SIZE      /* Cygwin limits.h defines its own PAGE_SIZE. */
 #define PAGE_SIZE              sysconf(_SC_PAGE_SIZE)
 #endif
 
+#ifndef PAGE_MASK      /* macOS defines its own PAGE_MASK. */
 #define PAGE_MASK              (~(PAGE_SIZE - 1))
+#endif
+
 #define __ALIGN_MASK(v, mask)  (((v) + (mask)) & ~(mask))
+
+#ifndef ALIGN          /* macOS defines its own ALIGN. */
 #define ALIGN(v, align)                __ALIGN_MASK(v, (__typeof__(v)) (align) - 1)
+#endif
+
+#define __ALIGN_FLOOR_MASK(v, mask)    ((v) & ~(mask))
+
+#ifndef ALIGN_FLOOR
+#define ALIGN_FLOOR(v, align)  __ALIGN_FLOOR_MASK(v, (__typeof__(v)) (align) - 1)
+#endif
+
 #define PAGE_ALIGN(addr)       ALIGN(addr, PAGE_SIZE)
 
 /**
@@ -58,7 +71,7 @@
        ({                                                                     \
                LTTNG_BUILD_RUNTIME_BUG_ON((alignment) == 0                    \
                                   || ((alignment) & ((alignment) - 1)));      \
-               (((align_drift) - (alignment)) & ((alignment) - 1)           \
+               (((align_drift) - (alignment)) & ((alignment) - 1));           \
        })
 
 #endif /* _LTTNG_ALIGN_H */
This page took 0.023258 seconds and 4 git commands to generate.