This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 1/2 v3] sys/cdefs.h: add ALIGN helper macros


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]