summaryrefslogtreecommitdiff
path: root/sal
diff options
context:
space:
mode:
Diffstat (limited to 'sal')
-rw-r--r--sal/osl/unx/memory.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/sal/osl/unx/memory.c b/sal/osl/unx/memory.c
index ca241b10d103..bde2fac83273 100644
--- a/sal/osl/unx/memory.c
+++ b/sal/osl/unx/memory.c
@@ -16,25 +16,36 @@
void* osl_aligned_alloc( sal_Size align, sal_Size size )
{
-#ifdef __ANDROID__
- return memalign(align, size);
-#else
if (size == 0)
{
return NULL;
}
else
{
+#if defined __ANDROID__
+ return memalign(align, size);
+#elif defined MAC_OS_X_VERSION_MAX_ALLOWED && MAC_OS_X_VERSION_MAX_ALLOWED < 1060
+ void* ptr = malloc(size + (align - 1) + sizeof(void*));
+ if (!ptr) return NULL;
+ char* aptr = ((char*)ptr) + sizeof(void*);
+ aptr += (align - ((size_t)aptr & (align - 1))) & (align - 1);
+ ((void**)aptr)[-1] = ptr;
+ return aptr;
+#else
void* ptr;
int err = posix_memalign(&ptr, align, size);
return err ? NULL : ptr;
- }
#endif
+ }
}
void osl_aligned_free( void* p )
{
+#if defined __APPLE__ && MAC_OS_X_VERSION_MAX_ALLOWED < 1060
+ free(((void**)p)[-1]);
+#else
free(p);
+#endif
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */