diff options
Diffstat (limited to 'sal')
-rw-r--r-- | sal/osl/unx/memory.c | 19 |
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: */ |