From 6878792ae42c0df120477b1bb8340802b0080374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Sat, 31 Oct 2020 20:34:20 +0100 Subject: [PATCH] C11: add aligned_alloc() Change-Id: If648c0e27ed946874d393e8e33a4548b70c8ecdb Reviewed-on: https://review.haiku-os.org/c/haiku/+/3377 Reviewed-by: Adrien Destugues --- headers/compatibility/bsd/features.h | 5 +++++ headers/posix/stdlib.h | 3 +++ src/system/libroot/posix/malloc_hoard2/wrapper.cpp | 11 +++++++++++ 3 files changed, 19 insertions(+) diff --git a/headers/compatibility/bsd/features.h b/headers/compatibility/bsd/features.h index 4513b500e4..1450c56e50 100644 --- a/headers/compatibility/bsd/features.h +++ b/headers/compatibility/bsd/features.h @@ -12,4 +12,9 @@ #endif +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define _ISOC11_SOURCE +#endif + + #endif // _FEATURES_H diff --git a/headers/posix/stdlib.h b/headers/posix/stdlib.h index 4890caf0a2..ebaa9ec96a 100644 --- a/headers/posix/stdlib.h +++ b/headers/posix/stdlib.h @@ -49,6 +49,9 @@ extern void *calloc(size_t numElements, size_t size); extern void free(void *pointer); extern void *malloc(size_t size); extern int posix_memalign(void **_pointer, size_t alignment, size_t size); +#ifdef _ISOC11_SOURCE +extern void *aligned_alloc(size_t alignment, size_t size); +#endif extern void *realloc(void *oldPointer, size_t newSize); /* process termination */ diff --git a/src/system/libroot/posix/malloc_hoard2/wrapper.cpp b/src/system/libroot/posix/malloc_hoard2/wrapper.cpp index b1ce8008e3..c5e8c43c1a 100644 --- a/src/system/libroot/posix/malloc_hoard2/wrapper.cpp +++ b/src/system/libroot/posix/malloc_hoard2/wrapper.cpp @@ -443,6 +443,17 @@ memalign(size_t alignment, size_t size) } +extern "C" void * +aligned_alloc(size_t alignment, size_t size) +{ + if (size % alignment != 0) { + __set_errno(B_BAD_VALUE); + return NULL; + } + return memalign(alignment, size); +} + + extern "C" int posix_memalign(void **_pointer, size_t alignment, size_t size) {