summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2024-04-19 14:58:38 -0400
committerTavian Barnes <tavianator@tavianator.com>2024-04-19 15:50:45 -0400
commit0d8bf80364a23d9b90ab6c034625b60e4c566c61 (patch)
treeefe7a9f5eae510dd18cfbea4cd6af4f2c1883e4c
parentc35d0c2ed5578b180e17c37588a047fd013cc619 (diff)
config: Check for aligned_alloc()
-rw-r--r--config/aligned-alloc.c8
-rw-r--r--config/header.mk1
-rw-r--r--src/alloc.c6
3 files changed, 12 insertions, 3 deletions
diff --git a/config/aligned-alloc.c b/config/aligned-alloc.c
new file mode 100644
index 0000000..4460038
--- /dev/null
+++ b/config/aligned-alloc.c
@@ -0,0 +1,8 @@
+// Copyright © Tavian Barnes <tavianator@tavianator.com>
+// SPDX-License-Identifier: 0BSD
+
+#include <stdlib.h>
+
+int main(void) {
+ return !aligned_alloc(_Alignof(void *), sizeof(void *));
+}
diff --git a/config/header.mk b/config/header.mk
index 06b8f7f..86a4dc5 100644
--- a/config/header.mk
+++ b/config/header.mk
@@ -10,6 +10,7 @@ include config/exports.mk
# All header fragments we generate
HEADERS := \
${GEN}/acl-is-trivial-np.h \
+ ${GEN}/aligned-alloc.h \
${GEN}/confstr.h \
${GEN}/fdclosedir.h \
${GEN}/getdents.h \
diff --git a/src/alloc.c b/src/alloc.c
index ec8608f..ebaff38 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -24,12 +24,12 @@ static void *xmemalign(size_t align, size_t size) {
bfs_assert(align >= sizeof(void *));
bfs_assert(is_aligned(align, size));
-#if __APPLE__
+#if BFS_HAS_ALIGNED_ALLOC
+ return aligned_alloc(align, size);
+#else
void *ptr = NULL;
errno = posix_memalign(&ptr, align, size);
return ptr;
-#else
- return aligned_alloc(align, size);
#endif
}