This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH 1/2 v3] sys/cdefs.h: add ALIGN helper macros
- From: Mike Frysinger <vapier at gentoo dot org>
- To: libc-alpha at sourceware dot org
- Date: Tue, 28 May 2013 18:48:48 -0400
- Subject: [PATCH 1/2 v3] sys/cdefs.h: add ALIGN helper macros
- References: <1369327649-906-1-git-send-email-vapier at gentoo dot org>
Rather than open coding the masks, add helper macros to do the magic.
This makes code easier to read.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2013-05-23 Mike Frysinger <vapier@gentoo.org>
* include/sys/cdefs.h (ALIGN_DOWN): New helper macro.
(ALIGN_UP): Likewise.
(PTR_ALIGN_DOWN): Likewise.
(PTR_ALIGN_UP): Likewise.
---
v3
- split out into sep commit from v2
include/sys/cdefs.h | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/include/sys/cdefs.h b/include/sys/cdefs.h
index 524fe57..36f22d6 100644
--- a/include/sys/cdefs.h
+++ b/include/sys/cdefs.h
@@ -15,4 +15,22 @@ rtld_hidden_proto (__chk_fail)
#endif
+/* Align a value by rounding down to closest size.
+ e.g. Using size of 4096, we get this behavior:
+ {4095, 4096, 4097} = {0, 4096, 4096}. */
+#define ALIGN_DOWN(base, size) ((base) & ~((size) - 1))
+
+/* Align a value by rounding up to closest size.
+ e.g. Using size of 4096, we get this behavior:
+ {4095, 4096, 4097} = {4096, 4096, 8192}. */
+#define ALIGN_UP(base, size) ALIGN_DOWN((base) + (size) - 1, (size))
+
+/* Same as ALIGN_DOWN(), but automatically casts when base is a pointer. */
+#define PTR_ALIGN_DOWN(base, size) \
+ (void *) ALIGN_DOWN ((uintptr_t) (base), (size))
+
+/* Same as ALIGN_UP(), but automatically casts when base is a pointer. */
+#define PTR_ALIGN_UP(base, size) \
+ (void *) ALIGN_UP ((uintptr_t) (base), (size))
+
#endif
--
1.8.2.1