diff --git a/public/tier1/utlmemory.h b/public/tier1/utlmemory.h index 0b3c3c35..2f60930c 100644 --- a/public/tier1/utlmemory.h +++ b/public/tier1/utlmemory.h @@ -38,11 +38,22 @@ #endif #if defined(_LINUX) || defined(__APPLE__) -inline void *_aligned_malloc( size_t size, size_t alignment ) +inline void *_aligned_malloc( size_t size, size_t align ) { - void *pTemp; - posix_memalign( &pTemp, alignment, size ); - return pTemp; + unsigned char *pAlloc, *pResult; + + if (!IsPowerOfTwo(uint(align))) + return NULL; + + align = (align > sizeof(void *) ? align : sizeof(void *)) - 1; + + if ( (pAlloc = (unsigned char*)malloc( sizeof(void *) + align + size ) ) == (unsigned char*)NULL) + return NULL; + + pResult = (unsigned char*)( (size_t)(pAlloc + sizeof(void *) + align ) & ~align ); + ((unsigned char**)(pResult))[-1] = pAlloc; + + return (void *)pResult; } #endif